Django以一种形式一对一的关系

时间:2016-07-26 12:58:38

标签: python django

我正在尝试为django的用户模型扩展注册表。它有两种关系,一种是UserAddress。表单需要包含UserUserDetailsAddress的所有字段。但我正在努力获得正确的观点和形式。只有ModelForm UserDetailsFormView相结合,并不会为UserAddress添加字段。

class User(AbstractBaseUser, PermissionMixin):
    email = models.EmailField(unique=True)


class UserDetails(model.Model):
    date_of_birth = models.DateField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    address = models.OneToOneField(Address, on_delete=models.CASCADE)

class Address(model.Model):
    field = models.CharField(max_length=100)
    field2 = models.CharField(max_length=100)

表单和视图如下所示:

class UserRegistrationForm(ModelForm):
    class Meta:
        model = Orchestra
        fields = '__all__'

class UserRegistrationView(FormView):
    form_class = UserRegistrationForm
    template_name = 'users/register.html'

<form action="" method="post">
    {% csrf_token %}
    {{ form.as_table }}
    <input type="submit" value="submit">
</form>

2 个答案:

答案 0 :(得分:0)

您错过了模型类中的 unicode str 方法声明。你应该总是声明它。 请记住,str用于python 3.x,而unicode用于python 2.x。

以下是类Address和python 2的示例:

def __unicode__(self):
    return '%s %s' % (self.field1, self.field2)

答案 1 :(得分:0)

我必须为每个模型创建不同的表单。然后组合从表单创建的所有实例。见this answer for more details