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)
谢谢
文档中描述了多对多字段.做就是了:
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(请参阅模型字段参考).
| 归档时间: |
|
| 查看次数: |
4392 次 |
| 最近记录: |