使用djang中的一个查询在关联模型中保存数据

2024-03-29 08:16:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django项目的注册模块工作。为了注册用户,我使用auth\u user表来扩展这个表,我又创建了一个模型配置文件

from django.contrib.auth.models import User
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    start_date = models.DateField()
    phone_number = models.CharField(max_length=12)
    address = models.CharField(max_length=225)
    subscription = models.BooleanField(default=False)

已成功创建配置文件表。现在我要做的是,当我提交注册表时,注册表中与Profile model相关的字段应该在插入与auth\u user model相关的字段之后自动插入。 意味着我不想先在auth\u用户模型中插入数据,然后在获得它的id之后再在Profile表中插入数据。 我想在一个查询中插入完整的记录。有可能吗?你知道吗


Tags: 数据django用户模型authmodelmodels注册表
1条回答
网友
1楼 · 发布于 2024-03-29 08:16:04

我认为您可以定义一个注册表单并重写formsave方法,以便在创建用户模型时保存Profile。供参考的示例代码:

class RegistrationForm(forms.ModelForm):
    start_date = forms.DateField()
    phone_number = forms.CharField()
    address = forms.CharField()
    subscription = forms.BooleanField()

    class Meta:
        model = User

    def save(self, commit=True):
        instance = super(RegistrationForm, self).save(commit=commit)
        profile = Profile(user=instance, start_date=self.cleaned_data['start_date'], phone_number=self.cleaned_data['phone_number'], address=self.cleaned_data['address'], subscription=self.cleaned_data['subscription'])
        profile.save()
        return instance


def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
             user = form.save()
             # do anything after user created
        else:
             raise Error('form validate failed')
    else:
         # handling the GET method

相关问题 更多 >