Django有很多很多反向关系

时间:2014-03-07 21:39:08

标签: python sql django database-administration

我正在尝试编写一个简单的消息系统。

基本上我有一个User表和一个Message表。

class User(models.Model):
   user = models.OneToOneField(User)# inherit djangos default user properties
   messages = models.ManyToManyField(Message)

class Message(models.Model):
   date = models.DateField()
   text = models.CharField(max_length=255)
   user = models.ManyToManyField(User)

我希望能够为尽可能多的消息添加尽可能多的用户。

我希望能够说出messages.users和users.messages。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您不应该在双方都定义关系。选择一个 - 可能是消息 - 并在那里定义它。 Django自动提供反向关系。

此外,您不需要单独的User类,尤其是如果M2M字段在消息本身上。所以,你可以这样做:

class Message(models.Model):
   date = models.DateField()
   text = models.CharField(max_length=255)
   users = models.ManyToManyField('auth.User')

现在,您可以为my_user.message_set.all()的用户和my_messages.users.all()消息的用户访问消息。