我正在构建一个小型网络应用程序。原则是用户可以在数据库中注册并添加出版物(他在网上找到的一些文章)。我想添加一些关于该出版物的信息:标题,摘要,出版日期和作者。问题是作者/作者可能是:注册用户(用户可能是文章的作者之一)或名字,姓氏,机构和主页的未知人员或混合注册用户和未知人/人。我怎么能在我的模型中实现它?
现在我已经为注册用户编写了用户配置文件。存储关于用户的一些额外信息总是好的,例如该研究所。
对于文章的作者,我继承具有用户个人资料类的类:/这不是一个好的解决方案,因为未知的作者!=注册用户,但他们有相同的字段:姓名,学院,主页等。
我会非常感谢任何提示:)
答案 0 :(得分:1)
我会将发布链接设为Author
而不是User
,然后您将Author
类设置为:
class Author(models.Model):
user = models.OneToOneField(User, blank=True, null=True)
first_name = models.CharField(max_length=50, blank=True)
last_name = models.CharField(max_length=50, blank=True)
# etc
我们的想法是,您可以将出版物与作者的概念进行一般性关联,然后允许作者成为注册用户(在这种情况下,您将使用user
属性中的详细信息,或匿名用户(您将使用Author
上的其他字段)
然后,您可以向Author添加一些实用程序方法以返回正确的数据。例如:
def get_first_name(self):
if self.user is not None:
return self.user.first_name
else:
return self.first_name
你可以做更多的事情来使它更加无缝,但这是一般的想法。