Django: Обратный аксессор столкнулся с обратным аксессором
В приведенном ниже коде у меня есть модели поста, лайков, комментариев. Когда я пытаюсь перенести модели, чтобы активировать их, я получаю ошибку обратного аксессора. Для лайков пользователь_that_liked ставит лайк только один раз, в то время как пользователь_liked_to может иметь много лайков. Для комментариев, как пользователь_that_commented, так и пользователь_commented_to могут иметь много комментариев. Как мне настроить мои модели, чтобы я мог делать с ними все, что хочу, и при этом решить эту проблему. Если вам нужна дополнительная информация, дайте мне знать.
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post_question = models.CharField(max_length=200)
pub_date = models.DateTimeField()
class Likes(models.Model):
user_that_liked = models.ForeignKey(User, on_delete=models.CASCADE)
user_liked_to = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
date = models.DateTimeField()
like_or_dislike = models.IntegerField(default=0)
class Comment(models.Model):
user_that_commented = models.ForeignKey(User, on_delete=models.CASCADE)
user_commented_to = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
date = models.DateTimeField()
comment = models.CharField(max_length=300)
Необходимо указать связанное имя, чтобы различать отношения
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post_question = models.CharField(max_length=200)
pub_date = models.DateTimeField()
class Likes(models.Model):
user_that_liked = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_that_liked')
user_liked_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_liked_to')
post = models.ForeignKey(Post, on_delete=models.CASCADE)
date = models.DateTimeField()
like_or_dislike = models.IntegerField(default=0)
class Comment(models.Model):
user_that_commented = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_that_commented')
user_commented_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_commented_to')
post = models.ForeignKey(Post, on_delete=models.CASCADE)
date = models.DateTimeField()
comment = models.CharField(max_length=300)
Однако, перенос этих пользовательских отношений кажется немного избыточным, потому что Likes может иметь только user_that_liked, а user_liked_to может быть получен из понравившегося объекта. (То же самое для комментария)
Итак, пользователь, которому "понравилось", может быть найден через like.post.user, а пользователь, которому понравилось, через like.user_that_liked