我的 models.py 中有一个名为 Account
的模型
在本例中,我想创建一个可以在其中选择自己的模型对象的字段。
例如,如果我有 3 个帐户 {Jack、Harry、Helena}
我想在它们之间选择我想要的帐户。其实我只是想创建一个以下系统。杰克可以跟随哈利和海伦娜,海伦娜也可以跟随杰克或哈利
我该怎么做呢?
Account类
class Account(models.Model):
username = models.CharField(max_length=100)
following = models.ManyToManyField(**Account**, blank=True)
几乎就像您使用的标题一样:使用
'self'
。但有一个警告:默认情况下,引用自身的ManyToManyField
是对称:如果A跟随B,那么B会自动跟随A。也许这不是你想要的。在这种情况下,请设置 symmetrical=False
[Django-doc]:
class Account(models.Model):
username = models.CharField(max_length=100)
following = models.ManyToManyField(
'self', symmetrical=False, blank=True, related_name='followers'
)
要创建以下系统,您可以使用 Django 的 ManyToManyField。该字段用于创建多对多关系,即一个对象可以属于多个类别并且一个类别也将具有多个对象的关系。
在您的 Account 模型中,您可以添加一个名为“following”的字段,并将其设置为“self”的 ManyToManyField。这意味着一个帐户可以有许多与其关联的其他帐户,这些帐户与其所关注的帐户相对应。
这是代码的更正版本:
class Account(models.Model):
username = models.CharField(max_length=100)
following = models.ManyToManyField('self', blank=True, symmetrical=False)
此处使用“对称=假”参数来表示如果杰克正在关注哈利,则并不一定意味着哈利正在关注杰克。
然后,您可以使用“以下”字段上的 add() 或 remove() 方法添加或删除帐户。例如,如果你想让杰克跟随哈利,你可以这样做:
jack = Account.objects.get(username='Jack')
harry = Account.objects.get(username='Harry')
jack.following.add(harry)
如果你想让杰克取消关注哈利,你可以这样做:
jack.following.remove(harry)