2

I am using the standard Django User-model and wrote this cutom Model:

class Messages(models.Model):
    sender = models.ForeignKey(User, related_name="sender", on_delete=models.CASCADE)
    receiver = models.ForeignKey(User, related_name="receiver", on_delete=models.CASCADE)
    content = models.TextField()
    date = models.DateTimeField(default=timezone.now)

Now, given a User-object user i want to access all the Messages he either sent or received. I tried: user.messages_set.all() but i am getting the following Error: 'User' object has no attribute 'messages_set'. How do i fix this?

Thanks for your Answers!

Sarius
  • 125
  • 2
  • 16
  • 2
    Does this answer your question? [What is \`related\_name\` used for in Django?](https://stackoverflow.com/questions/2642613/what-is-related-name-used-for-in-django) – kyore Mar 10 '20 at 13:06
  • @kyore Partially. Is there a way for getting a queryset that contains all the objects where user is either the sender or the receiver? using backwards-accessing? – Sarius Mar 10 '20 at 13:14

1 Answers1

4

Cause that you defined related_name='sender'. If you use related name, you must use it for backward queries. You can use this code for access your use messages:

user.sender.all()

You can use more detail about related_name here

kamilyrb
  • 2,502
  • 3
  • 10
  • 25
  • Is there a way to get a queryset containing all the objects here user is either the sender or the receiver? using backwards-access? – Sarius Mar 10 '20 at 13:12
  • 1
    If you want to get messages of a user that he can be receiver or sender, you can use this query: Messages.objects.filter(Q(sender=user)|Q(receiver=user)) – kamilyrb Mar 10 '20 at 13:15