【问题标题】:Django models asymmetric relationshipDjango 建模非对称关系
【发布时间】:2016-07-22 09:14:18
【问题描述】:

使用以下 Django 模型:

class Author(models.Model):
    name = models.CharField(max_length=30)
    bestbookaccordingtome=models.????(Author,null=True, blank=True, default = None)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.OnetoOneField(Author)

我想要每本书都有一位作者(仅)的经典关系。

但我也希望能够将选定的书分配给作者(例如我最喜欢的该作者的书)。

我尝试了一个外键,但 django 不喜欢它。 有什么python干净的方法吗?

【问题讨论】:

  • 如果您希望为用户对作者最喜欢的书籍的选择建模,那么我真的觉得这个领域应该存在于用户和作者之间的多对多关系上。这样想:你最喜欢奥斯卡王尔德的作品可能是认真的重要性,而对我来说,它肯定是多里安格雷的照片。明白了吗?
  • 在这种情况下,我将是唯一可以选择的人,用户不会对此发表意见。
  • 对了,如果每本书只有一个作者,我不应该使用外键吗?
  • 是的,authorbestbookaccordingtome 字段都应建模为 ForeignKeyFields。当你说“Django 不喜欢它”时,你到底是什么意思?你能说得更具体些吗:)
  • 抱歉,错误是:“Company.random”的反向查询名称与字段名称“Book.author”冲突。提示:重命名字段“Book.author”,或在字段“Company.random”的定义中添加/更改相关名称参数。我重命名了该字段,它似乎可以工作

标签: django django-models


【解决方案1】:

你需要的是ManyToManyField

class Author(models.Model):
    name = models.CharField(max_length=30)
    bestbookaccordingtome = models.ManyToManyField('self', symmetrical=False, related_name='best_book_according_to_me')

另外,如果你需要在你的 n-m 模型中指定额外的字段,你可以使用through 来表示模型的名称。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多