Django:是否可以创建一个类似概要文件模型的模型,以便在注册时自动创建一个实例

Django:是否可以创建一个类似概要文件模型的模型,以便在注册时自动创建一个实例,django,django-models,django-rest-framework,django-forms,django-views,Django,Django Models,Django Rest Framework,Django Forms,Django Views,我有一个自定义的用户模型,并从中创建了一个概要文件模型。因此,当用户注册时,配置文件模型中也会创建一个配置文件实例。现在我有了另一个类似的模型,地址模型。我试着用同样的方法配置它,但是没有创建地址实例。有可能吗?这只是为了了解是否可以创建类似模型的概要文件。 这是我的模型 class Profile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_del

我有一个自定义的用户模型,并从中创建了一个概要文件模型。因此,当用户注册时,配置文件模型中也会创建一个配置文件实例。现在我有了另一个类似的模型,地址模型。我试着用同样的方法配置它,但是没有创建地址实例。有可能吗?这只是为了了解是否可以创建类似模型的概要文件。 这是我的模型

class Profile(models.Model):

    user                    = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    summary                 = models.TextField(max_length=250, blank=True, null=True)
    birth_date              = models.DateField(null=True,blank=True, auto_now_add=False, auto_now=False)
    country                 = CountryField(blank_label='(select country)')
    profile_pic             = models.ImageField(upload_to='pimage/', default='pimage/default.png')

    def __str__(self):
        return f'{self.user.username} Profile'

class Address(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True)
    address = models.CharField(max_length=200, null=True)
    city = models.CharField(max_length=200, null=True)
    state = models.CharField(max_length=200, null=True)
    zipcode = models.CharField(max_length=200, null=True)
    mobile = models.CharField(max_length=12, null=True)


    def __str__(self):
        return f'{self.user.username} Address'
观点

您可以覆盖
用户
模型的save()方法来自动创建
地址
实例:

来自django.db导入模型的

类用户(models.Model):
#您的用户模型字段
def保存(自身、*args、**kwargs):
如果是自我状态,则添加:
#在这里创建您的地址实例
通过
超级(用户,自我)。保存(*args,**kwargs)
如果您想知道如何扩展Django用户模型,这里有一个可以帮助您的示例


即使您可以在创建用户实例后定义一些信号来创建Address实例

来自django.db导入模型的

从django.contrib.auth.models导入用户
从django.db.models.signals导入后保存
从django.dispatch导入接收方
类地址(models.Model):
user=models.OneToOneField(用户,on_delete=models.CASCADE)
bio=models.TextField(最大长度=500,空白=True)
位置=型号.CharField(最大长度=30,空白=真)
出生日期=models.DateField(null=True,blank=True)
@接收方(保存后,发送方=用户)
def create_user_地址(发件人、实例、已创建、**kwargs):
如果创建:
Address.objects.create(用户=实例)
@接收方(保存后,发送方=用户)
def save_user_地址(发件人、实例、**kwargs):
instance.address.save()

您是否有任何例外情况?为什么这是不可能的是的。当我试图打开地址模板时,我得到了一个RelatedObjectsDoesNotexist。问题是类似于配置文件实例的地址实例在用户注册时不会自动创建。我认为首先你应该确保用户实例已正确创建,然后你应该尝试创建地址实例。我认为这是因为用户实例,您的
地址
模型与
配置文件
模型没有任何关系,因此您为什么怀疑此模型哦..好的。这可能就是原因。我认为它会在用户注册时自动创建,就像不手动创建配置文件一样。非常感谢。我想使用信号会做得最好!
@login_required
def address_add(request):
    if request.POST:
        a_form = AddressForm(request.POST, instance=request.user.address)
        if a_form.is_valid():
            a_form.save()
            messages.success(request, f'Address Saved')
            return redirect('user_address')
    else:
        a_form = AddressForm(instance=request.user.address)

    context = {'a_form':a_form,}

    return render(request, 'áccounts/user_address.html', context)