我有一个模型来存储“新闻”文章。我想与Django建立M2M关系,并为此关系添加“相似度”分数。我不希望相似性是对称的,因此将其设置为False。通过搜索,我发现以下代码是正确的方法。它起作用,除了需要将“ related_name”添加到“ from_news”或“ to_news”之一中。尽管我不确切知道为什么需要这样做,但这没关系。我的主要问题是,由于这种关系不是对称的,当我查询类似文章时,Django如何知道它应该引用“ from_news”列?是“发件人”,还是因为它先出现,而“ to_news”之后出现?我想我应该在“新闻”类的“相似”定义中明确声明它。请阐明其工作方式。谢谢!
class News(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
similars = models.ManyToManyField('self', through='Similarity', symmetrical=False)
class Similarity(models.Model):
from_news = models.ForeignKey(News, on_delete=models.CASCADE)
to_news = models.ForeignKey(News, on_delete=models.CASCADE)
score = models.DecimalField(max_digits=2, decimal_places=2)