Django模型字段,如果为空则返回替代值?

ffvjumwh  于 2022-12-05  发布在  Go
关注(0)|答案(5)|浏览(208)

如果django模型字段有空值,有没有办法返回一个不同的设置值?
我有用户的个人资料图像(image_url),对于没有一个用户,我想返回一个默认的无头像网址,而不是'无'。

class User(models.Model):
    name = models.CharField(max_length=800)
    image_url = models.URLField(max_length=2000, blank=True, null=True)
mklgxw1f

mklgxw1f1#

最简单的方法是向模型添加一个额外的属性:

@property
def image_url_with_default(self):
    return self.image_url or whatever_the_default_url_is
zphenhs4

zphenhs42#

正如@paulo-scardine所建议的,当你想实际使用它的时候,只需要添加一个条件- i也就是说,在一个模板中,或者如果它被绑定到多个地方使用,就像模型的一个方法/属性(如@remcogerlich所建议的)。

@property
def avatar(self):
    return self.image_url or settings.DEFAULT_AVATAR_URL
wmtdaxz3

wmtdaxz33#

是否尝试过在URLField上使用默认选项?
你可以这样做:

image_url = models.URLField(max_length=2000, blank=True, null=True,  default='http://misyte.com/default-image.jpg')

还没有测试过...... django上也有一个ImageField ......也许你也可以检查一下
希望这对你有帮助

bvjveswy

bvjveswy4#

你可以重写__getattribute__方法,通过this answer。这样做的好处是不引入额外的属性(你需要记住,或者更新任何相关的引用):

class User(models.Model):
    ....
    def __getattribute__(self, name):
        attr = models.Model.__getattribute__(self, name)
        if name == 'avatar' and not attr:
            return 'path/to/default/img'
        return attr
dgiusagp

dgiusagp5#

哦,我的...用户输入的URL ...看起来很危险。

class User(models.Model):
    name = models.CharField(max_length=800)
    image = models.ImageField(upload_to='avatars', blank=True, null=True)

    def avatar(self):
        if self.image: return self.image.url
        return '/path/to/default/avatar.png'

如果你把图片存储在你的身边,你至少可以运行类似“nude“的东西来分析图片的裸体。

相关问题