У меня есть модель, где я храню «новостные» статьи. Я хочу создать отношение M2M с Django и добавить оценку «сходство» к этим отношениям. Я не хочу, чтобы сходство было симметричным, поэтому я установил его в False. Из моего поиска я нашел следующий код - путь к go. Это работает, за исключением того, что требует, чтобы '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)