我尝试在django中创建和管理自定义用户。 我看到有两种可能性,我已选择扩展(不创建新的身份验证)。
class Artists(models.Model):
user = models.OneToOneField(User)
artist_image = models.ImageField(null=True, blank=True, upload_to="/artist_image/")
def __str__(self):
return 'Profil de {0}'.format(self.username)
def get_absolute_url(self):
return reverse('artist-details', kwargs={'pk': self.pk})
正如我在doc中所读到的,我只是使用django auth模型的User类创建一个OneToOne字段,因此我可以在我自己的用户(这里是艺术家)上访问方法和属性,例如用户名,电子邮件。
class CreateArtistForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'email')
def save(self, commit=True):
user = super(CreateArtistForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
在这里,我将UserCreationForm扩展为准备一个稍微不同的表单(我希望在我的注册表单上有电子邮件字段)。
但这是我的问题:我首先尝试了
class Meta:
model = Artists
fields = ('user.username', 'user.email')
但我在模型艺术家中未知的错误字段。 所以我尝试使用用户名和电子邮件以及同样的错误。
所以我将model = Artists
更改为User,它运行正常。
但是现在如何在用户保存时注册我的艺术家对象?
我是否必须制作(在save()中):
artist = Artists()
artist.user = user
artist.save()
或覆盖create_user()? 我在这里迷失了方向,而且我在寻找无法找到某些东西的文档和问题,因为大多数示例人都定义了自己的身份验证。
提前致谢
无敌
编辑:我正在使用django 1.8.2和python 3.4