Django ORM, доступ к атрибутам отношений

#python #django #django-models

#python #django #django-модели

Вопрос:

В моих проектах есть два приложения: account_app и image_app, которые имеют приведенные ниже модели.

Мне интересно, возможно ли напрямую получить доступ к количеству лайков одного профиля, который имеет отношение к пользователю OneToOne (django bultin), которое, в свою очередь, имеет отношение ManyToMany к изображениям user_like.

account_app/models.py

 class Profile(models.Model):
    # quando usar a relacao nao colocar o nome User de vez, tem que usar dessa forma
    # essa relacao nos permite linkar o perfil com o usuario
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    date_of_birth = models.DateField(blank=True, null=True)
    photo = models.ImageField(upload_to='users/%Y/%m/%d', blank=True)
 

image_app/models.py

 class Image(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='images_created')
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, blank=True)
    url = models.URLField()
    image = models.ImageField(upload_to='images/%Y/%m/%d')
    description = models.TextField(blank=True)
    created = models.DateField(auto_now_add=True, db_index=True)
    users_like = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='images_liked',blank=True)
 

Ответ №1:

Вы также можете ввести свойство likes в модель профиля.

 class Profile(models.Model):
    # quando usar a relacao nao colocar o nome User de vez, tem que usar dessa forma
    # essa relacao nos permite linkar o perfil com o usuario
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    date_of_birth = models.DateField(blank=True, null=True)
    photo = models.ImageField(upload_to='users/%Y/%m/%d', blank=True)

    @property
    def likes(self):
        self.user.images_liked.count()
 

Ответ №2:

Учитывая экземпляр профиля profile , вы можете получить количество users_like с:

 number_of_likes = profile.user.images_liked.count()