2013-06-27 3 views
1

У меня есть модель, которая является заявлением на работу с 3 состояниями.Модель рассчитанная на Django

Принято: явно принял
Отклонено: явно отвергнуто
В ожидании: ни явно не принято ни отвергнута

Это имеет смысл для меня, чтобы определить accepted и А rejected поля для моей модели, так что я могу явно установить их , Но свойство pending обусловлено двумя другими ... поэтому установка свойства для него не имеет смысла.

Я мог бы просто написать для него метод, например job.pending(), который возвращает логическое значение, которое равно (not accepted) and (not rejected). Но есть ли способ сделать только job.pending без написания метода?

Просто любопытно ...

+0

Вы можете определить [Managed Атрибут] (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