django模型,需要两个不同领域的领域

时间:2012-02-21 22:40:09

标签: django django-models

我正在构建一个小型网络应用程序。原则是用户可以在数据库中注册并添加出版物(他在网上找到的一些文章)。我想添加一些关于该出版物的信息:标题,摘要,出版日期和作者。问题是作者/作者可能是:注册用户(用户可能是文章的作者之一)或名字,姓氏,机构和主页的未知人员或混合注册用户和未知人/人。我怎么能在我的模型中实现它?

现在我已经为注册用户编写了用户配置文件。存储关于用户的一些额外信息总是好的,例如该研究所。

对于文章的作者,我继承具有用户个人资料类的类:/这不是一个好的解决方案,因为未知的作者!=注册用户,但他们有相同的字段:姓名,学院,主页等。

我会非常感谢任何提示:)

1 个答案:

答案 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

你可以做更多的事情来使它更加无缝,但这是一般的想法。