当我们获得模型对象时,如何默认返回image.url?

时间:2019-04-02 13:35:31

标签: python django imagefield

我希望我的模型对象始终返回字段图像的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 个答案:

答案 0 :(得分:3)

您可以像这样向模型中添加属性,请注意,我在字段名称中添加了下划线:

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)

答案 1 :(得分:0)

使用__str__()方法

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

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

UPDATE-1

我认为 @propert 可能适合您

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

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

现在,您可以按以下方式访问网址,
print(content.avatar_url)