2013-06-27 184 views
1

我有一個模型,這是一個工作申請,有3個州。Django模型計算屬性

接受:明確接受
拒絕:明確拒絕
待定:既沒有明確接受也不拒絕

這是有道理的,我定義acceptedrejected領域對我的模型,所以我可以明確地將它們設置。但pending財產是基於其他兩個條件...所以設置一個屬性是沒有意義的。

我可以爲它寫一個方法,如job.pending()返回一個布爾值,它只是(not accepted) and (not rejected)。但是有沒有辦法在沒有編寫方法的情況下做job.pending

只是好奇...

+0

可以定義一個[託管屬性(https://docs.djangoproject.com/en/dev/glossary/#term-property) – karthikr

+1

你爲什麼不願意有一個' pending()方法? –

+0

不「不情願」,只是好奇。我同意'pending()'是最優雅的事情,因爲它是最少的工作量,並且不會破壞任何默認行爲。 – reedvoid

回答

2

可以重寫save()方法做這樣的事情,所以,每次你改變你的工作模型,可以重新計算審理中。雖然我同意這種說法,pending()方法也不錯。

class Job(models.Model): 
    accepted = ... 
    reject = ... 
    pending = ... (Boolean Fields) 

    def save(self, *args, **kwargs): 
     self.pending = (not self.accepted) and (not self.rejected) 
     super(Job, self).save(*args, **kwargs) # Call the "real" save() method. 

https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods