我正在尝试为django的用户模型扩展注册表。它有两种关系,一种是User
和Address
。表单需要包含User
,UserDetails
和Address
的所有字段。但我正在努力获得正确的观点和形式。只有ModelForm
UserDetails
与FormView
相结合,并不会为User
和Address
添加字段。
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>
答案 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