【问题标题】:Django one-to-one relationships in one form一种形式的Django一对一关系
【发布时间】:2016-11-30 03:25:05
【问题描述】:

我正在尝试为 django 用户模型的扩展制作注册表单。它有两个关系,一个到UserAddress。表单需要包含来自UserUserDetailsAddress 的所有字段。但我正在努力获得正确的观点和形式。仅将 ModelFormUserDetails 结合使用 FormView 不会添加 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>

【问题讨论】:

  • 请发表您的观点和形式,并准确说明您想要做什么,“努力获得正确的观点和形式”是不够的。
  • 我已经添加了视图和表单。这给了我一个用户的外键选择字段,而不是字符字段

标签: python django


【解决方案1】:

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

这是一个地址类和python 2的例子:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2022-11-14
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2020-10-22
      相关资源
      最近更新 更多