Query using related name in django

Issue

I’ve two models:

class User(models.Model):
    email = models.EmailField()
    name = models.CharField(max_length=255)
    password = models.CharField(max_length=255)

class Profile(models.Model):
    group = models.ForeignKey(User, related_name='profiles')
    image = models.ForeignKey(Media, on_delete=models.CASCADE)
    #more attributes

I’ve user’s id and I want to get his image.

user = User.objects.get(id=id)
image = user.profiles.image

This is throwing error. How can I do it?

Solution

The reason for the error is that your User to Profile relation is many-to-one, so when you call user.profiles it is creating a queryset of possibly many Profile objects and not just one. The queryset of profiles does not have an image attribute.

You need to do one of two things, either:

a) Extract a single profile from your profiles queryset, e.g. user.profiles.first() – note that if you have multiple profiles then this will just get the first one in the set by whichever order_by the profile model has.

b) Set the User/Profile relationship to one-to-one rather than many-to-one by using a models.OneToOneField. This will allow you to directly access the profile with user.profile

Once you have direct access to the profile object, you can call the image attribute that it has.

Answered By – 0sVoid

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published