如何在获取模型对象时默认return image.url?

How to defaultly return image.url when we get model Object?

我希望我的模型对象总是 return 场图像的 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

简而言之,我想要一些可以改变模型字段 return 的东西。

使用__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)

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

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)