django ManyToMany通过帮助

dot*_*tty 6 django many-to-many model

我有关于人际关系的问题.

我希望用户有友谊.因此,用户可以是另一个用户的朋友.我假设我需要通过友谊表使用ManyToManyField.但我无法让它发挥作用.有任何想法吗?

这是我的模特.

class User(models.Model):
    username = models.CharField(max_length=999)
    password = models.CharField(max_length=999)
    created_on = models.DateField(auto_now = False, auto_now_add = True)
    updated_on = models.DateField(auto_now = True, auto_now_add = False)
    friends = models.ManyToManyField('self')
    pendingFriends = models.ManyToManyField('self', through='PendingFriendship', symmetrical=False, related_name='friend_requested')

class PendingFriendship(models.Model):
    user = models.ForeignKey('User', related_name='user')
    requested_friend = models.ForeignKey('User', related_name='requested_friend')
    created_on = models.DateField(auto_now = False, auto_now_add = True)
    updated_on = models.DateField(auto_now = True, auto_now_add = False)
Run Code Online (Sandbox Code Playgroud)

谢谢

Fel*_*ing 6

文档中描述了多对多字段.做就是了:

class User(models.Model):
    username = models.CharField(max_length=999)
    password = models.CharField(max_length=999)
    created_on = models.DateField(auto_now = False, auto_now_add = True)
    updated_on = models.DateField(auto_now = True, auto_now_add = False)
    friends = models.ManyToManyField('self')
Run Code Online (Sandbox Code Playgroud)

through如果要为关系添加额外字段,则只需使用.本节描述了所有可能性的另一种描述.

当您为模型User命名时,我假设您没有使用构建身份验证框架.但是如果你使用它,你不必自己实现身份验证,所以考虑一下.

更新: 您是否阅读过我链接的部分?在那里描述:

中间模型有一些限制:

  • 您的中间模型必须包含一个 - 且只有一个 - 目标模型的外键(在我们的示例中,这将是Person).如果您有多个外键,则会引发验证错误.
  • 您的中间模型必须包含一个 - 且只有一个 - 源模型的外键(在我们的示例中,这将是Group).如果您有多个外键,则会引发验证错误.
  • 唯一的例外是通过中间模型与自身具有多对多关系的模型.在这种情况下,允许使用同一模型的两个外键,但它们将被视为多对多关系的两个(不同)侧.
  • 在定义从模型到自身的多对多关系时,使用中间模型,必须使用symmetrical=False(请参阅模型字段参考).