如果django模型字段有空值,有没有办法返回一个不同的设置值?我有用户的个人资料图像(image_url),对于没有一个用户,我想返回一个默认的无头像网址,而不是'无'。
class User(models.Model): name = models.CharField(max_length=800) image_url = models.URLField(max_length=2000, blank=True, null=True)
mklgxw1f1#
最简单的方法是向模型添加一个额外的属性:
@property def image_url_with_default(self): return self.image_url or whatever_the_default_url_is
zphenhs42#
正如@paulo-scardine所建议的,当你想实际使用它的时候,只需要添加一个条件- i也就是说,在一个模板中,或者如果它被绑定到多个地方使用,就像模型的一个方法/属性(如@remcogerlich所建议的)。
@property def avatar(self): return self.image_url or settings.DEFAULT_AVATAR_URL
wmtdaxz33#
是否尝试过在URLField上使用默认选项?你可以这样做:
image_url = models.URLField(max_length=2000, blank=True, null=True, default='http://misyte.com/default-image.jpg')
还没有测试过...... django上也有一个ImageField ......也许你也可以检查一下希望这对你有帮助
bvjveswy4#
你可以重写__getattribute__方法,通过this answer。这样做的好处是不引入额外的属性(你需要记住,或者更新任何相关的引用):
__getattribute__
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
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“的东西来分析图片的裸体。
5条答案
按热度按时间mklgxw1f1#
最简单的方法是向模型添加一个额外的属性:
zphenhs42#
正如@paulo-scardine所建议的,当你想实际使用它的时候,只需要添加一个条件- i也就是说,在一个模板中,或者如果它被绑定到多个地方使用,就像模型的一个方法/属性(如@remcogerlich所建议的)。
wmtdaxz33#
是否尝试过在URLField上使用默认选项?
你可以这样做:
还没有测试过...... django上也有一个ImageField ......也许你也可以检查一下
希望这对你有帮助
bvjveswy4#
你可以重写
__getattribute__
方法,通过this answer。这样做的好处是不引入额外的属性(你需要记住,或者更新任何相关的引用):dgiusagp5#
哦,我的...用户输入的URL ...看起来很危险。
如果你把图片存储在你的身边,你至少可以运行类似“nude“的东西来分析图片的裸体。