Django отношение «многие ко многим» с дополнительными столбцами - PullRequest
0 голосов
/ 26 января 2020

У меня есть модель, где я храню «новостные» статьи. Я хочу создать отношение 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)
...