Django表单上的一对一关系

时间:2017-01-12 10:29:59

标签: django

我有以下链接到“user”的模型:

class Profile(models.Model):
    user = models.OneToOneField(User)
    title = models.CharField(max_length=10)
    dob = models.DateField(max_length=8)

    class Meta:
        managed = True
        db_table = 'fbf_profile'

然后我有以下注册表格:

class RegistrationForm(BootstrapModelForm,UserCreationForm):

def __init__(self, *args, **kwargs):
    super(RegistrationForm, self).__init__(*args, **kwargs)
    # The default Django user model doesn't require these fields to be set
    # but we do.
    self.fields['first_name'].required = True
    self.fields['last_name'].required = True
    self.fields['email'].required = True

def clean_email(self):
    email = self.cleaned_data['email']
    if User.objects.filter(email__iexact=email).exists():
        raise ValidationError('There is already an account registered with this e-mail address.')
    return email

class Meta:
    model = User
    fields = ['first_name', 'last_name', 'email', 'username']

然后我可以在我的模板中使用它们:

        <div class="form-group">
          <label class="col-sm-5 control-label">{{ form.first_name.label }}:</label>
          <div class="col-sm-7">
            {{ form.first_name }}
            <div class="text-danger">
              {% for error in form.first_name.errors %}{{ error }}<br/>{% endfor %}
            </div>
          </div>
        </div>

但是,我如何在模板中使用Profile模型中的“dob”,就像我在上面使用form.first_name.label和form.first_name一样。非常感谢Alan。

3 个答案:

答案 0 :(得分:1)

如果使用modelForms,您需要两种不同的表单 - 一种用于User模型,另一种用于Profile模型。然后,您可以在模板中的同一<form>标记内显示,并在视图中验证/保存两者。

另一个解决方案是定义一个包含两个模型字段的普通(非模型&#39;)表单,并自己编写save方法。

答案 1 :(得分:0)

假设form是您在模板中使用的User个对象,您应该能够使用dob访问form.profile.dob字段。< / p>

答案 2 :(得分:0)

非常感谢Bruno给出了正确答案。它引导我到以下链接:

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#onetoone

我希望它有所帮助。