2013-10-27 43 views
2

有沒有辦法爲django模型字段返回一個不同的設置值,如果該字段有一個空值?Django模型字段,替代值返回如果爲null?

我有配置文件圖像(image_url)的用戶,沒有我想要返回默認沒有頭像網址,而不是'None'的用戶。

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

你能不能給我們:-) – pleasedontbelong

+0

爲例@pleasedontbelong添加一個 – itsquestiontime1

回答

3

最簡單的方法是給模型添加一個額外的屬性:

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

您是否嘗試過使用URLField上的default選項?

你可以做些事情,如:

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

沒有測試......也有在Django上的ImageField的..也許你可以檢查過

希望這有助於

+0

不默認任何東西插入到數據庫? – itsquestiontime1

+0

好吧... URLField存儲爲一個varchar在數據庫中,但我不知道它是否會繞過URL Validator並存儲「任何」..如果你給它一個嘗試讓我知道結果n_n – pleasedontbelong

+0

@ itsquestiontime1:是,這會將默認的url存儲到數據庫中。不是最優的(如果它改變了呢?) – RemcoGerlich

0

哦,我的...用戶輸入的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」。

+0

該網址是CDN上的路徑,無需擔心。 – itsquestiontime1

+0

在Django中,您可以將MEDIA_URL指向CDN並忘記它 - 將CDN網址存儲在數據庫中似乎違反了DRY。 –

2

作爲@ paulo-scardine的建議,只要在實際使用它時添加一個條件 - 即在一個模板中,或者如果它被綁定在多個地方使用,則作爲模型的一個方法/屬性(如@ remcogerlich)建議。

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