所以我知道Django有一个内置的用户系统,它包含用户名、电子邮件、密码、名字和姓氏。我想知道如何在我的网站上利用这个
所以我在models.py文件中有一个first\u name和last\u name字段,它们是charfield。我想知道如何将它们连接到Django附带的已经存在的UserForm
我已经尝试了一些方法,比如使用models.py文件
class UserProfileInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.OneToOneField(User, on_delete=models.CASCADE)
下面是form.py文件的一些代码
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta():
model = User
fields = ('username','email','password','first_name')
从表单中可以看到,我添加了first\u name属性,在models.py文件中,我将first\u name与forms.py连接起来。我现在得到这个错误
HINT: Add or change a related_name argument to the definition for 'UserProfileInfo.user' or 'UserProfileInfo.first_name'.
因此,我在模型中添加了一个相关的名称字段,如下所示
first_name = models.OneToOneField(User, on_delete=models.CASCADE,related_name='first_name')
但是,你不知道吗,我又犯了一个错误:
ValueError: Cannot assign "''": "User.first_name" must be a "UserProfileInfo" instance.
我真的不知道这里发生了什么
所以我希望不会出现错误,就像用户字段一样。相反,我犯了这个错误。任何帮助都将不胜感激:)
您的代码正在为
user
和first_name
字段的OneToOne
模型设置User
。所以这意味着相关字段将是User.id
。 要指定要UserProfileInfo.first_name
映射到User.first_name
,需要设置to_field=first_name
但是,这仍然会导致问题,因为您只能将
OneToOne
关系设置为唯一字段。因为User.first_name
不是唯一的,所以不能为它设置OneToOne
关系如果两个
OneToOne
关系都引用同一个对象,那么其中一个关系是多余的,因为您可以通过另一个关系访问该对象上的字段。最好在UserProfileInfo
上有一个通过user
字段获取名字的方法当
User
被创建/更新时,您还需要设置创建/更新UserProfileInfo
的信号。看看this article还有其他方法可以扩展Django中的
User
模型。查看this article或this answer以获得建议但是,如果不向
User
模型添加任何额外字段,直接使用它可能更好相关问题 更多 >
编程相关推荐