Как по умолчанию вернуть image.url, когда мы получаем модель Object? - PullRequest
1 голос
/ 02 апреля 2019

Я хочу, чтобы мой объект модели всегда возвращал image.url изображения поля.

Моя модель:

class Content(models.Model):
    ...
    avatar = models.ImageField(upload_to=file, blank=True, null=True)

Я хочу что-то вроде:

class Content(models.Model):
    ...
    def get_avatar(self): # some default func for returning fields
        return self.avatar.url

Это должно работать так, когда я получаю объект:

content = Content.objects.get(pk=1)
print(content.avatar)

И он должен напечатать путь:

/media/uploads/dsadsadsa.jpg

Вкратце, я хочу что-то, что изменит возвращение поля модели.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Вы можете добавить свойство к вашей модели, как это, заметьте, я добавил подчеркивание к имени поля:

class Content(models.Model):
    ...
    _avatar = models.ImageField(upload_to=file, blank=True, null=True)

    @property
    def avatar(self):
        return self._avatar.url

Теперь вы можете сделать:

print(content.avatar)
0 голосов
/ 02 апреля 2019

Использование __str__() метод

class Content(models.Model):
    ...
    avatar = models.ImageField(upload_to=file, blank=True, null=True)

    <b>def __str__(self):
        try:
            return self.avatar.url
        except AttributeError: # "self.avatar" may be None
            return "no avatar"</b>

UPDATE-1

Я думаю, @propert может вас устроить

class Content(models.Model):
    ...
    avatar = models.ImageField(upload_to=file, blank=True, null=True)

    <b>@property
    def avatar_url(self):
        try:
            return self.avatar.url
        except AttributeError:  # "self.avatar" may be None
            return "no avatar"</b>

Теперь вы можете получить доступ к URL как,
print(content.avatar_url)

...