Не работает обратный запрос по внешнему ключу в Django

hi я работаю над приложением чата на django с django channels и я пытаюсь запросить все первые сообщения пользователя здесь, когда я делаю

user.message_set.all()

он бросает

AttributeError at /
'User' object has no attribute 'message_set'

полный отслеживание:

Traceback (most recent call last):
  File "/home/__neeraj__/.local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/__neeraj__/.local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/__neeraj__/Documents/chat/home/views.py", line 10, in index
    print(i.messages_set.all())
AttributeError: 'User' object has no attribute 'message_set'

my models.py

class Message(models.Model):
    sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sender")
    receiver = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="receiver"
    )
    text = models.CharField(max_length=2000)
    created_on = models.DateTimeField(auto_now=True)

Мое мнение :

def index(request):
    users = User.objects.all()
    context = {"users": users}
    for user in users:
        print(user.message_set.all())
    return render(request, "index.html", context=context)

это происходит потому, что у меня есть двойная внешняя ключевая ссылка модели пользователя на таблицу сообщений?

Вы совершенно неправильно указали related_name. (С вашей текущей конфигурацией вы могли бы сделать user.receiver.all() для получения полученных сообщений, но это не имеет смысла для читателя.)

Вам понадобится что-то вроде

sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="messages_sent")
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name="messages_received")

после чего можно использовать user.messages_received.all() и user.messages_sent.all().

Вернуться на верх