首页 > 解决方案 > django模型中的自动外键

问题描述

在 Django 中可以做到这一点。我有模型,我希望每个新用户都在模型用户中注册,并在外键注册中的模型客户中自动注册

class Customer(models.Model):
                     here auto 
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    phone = models.CharField(max_length=11,null=True)
    likecus=models.ManyToManyField(smartphone ,verbose_name="b",null=True)

    def __str__(self):
        return "User: {}, phone: {}".format(self.user, self.phone)

标签: djangodjango-rest-framework

解决方案


你可以用post_save 信号做到这一点。

from django.contrib.auth import get_user_model
from django.db.models.signals import post_save
from django.dispatch import receiver


@receiver(post_save, sender=get_user_model())
def create_customer(sender, instance, created, **kwargs):
    if created:
        # if your user model has phone, if not remove phone.
        Customer.objects.create(user=instance, phone=instance.phone)

或者如果您有自定义用户模型,则使用第二种方法。覆盖save()方法:

class YourUserModel(...):
    ...

    def save(self,*args,**kwargs):
        created = not self.pk
        super().save(*args,**kwargs)
        if created:
            Customer.objects.create(user=self, phone=self.phone)

推荐阅读