2016-04-01 5 views
0

Возможно ли, чтобы один атрибут модели зависел от другого атрибута? В моем случае есть атрибут has_translator в модели Job. Я хочу, чтобы этот атрибут был True тогда и только тогда, когда translator не Null.Атрибут модели, основанный на другом атрибуте

Я рассматривал вопрос об переопределении метода save класса Job или создания нового свойства метода has_translator, который, вероятно, не самый лучший способ.

Существует an answer говорить о переопределение метода save, но я не знаю, почему звонит super в этом случае, так что я не уверен, если я должен использовать его.

class Job(models.Model): 
    customer = models.ForeignKey(User, related_name='customer') 
    translator = models.ForeignKey(User, related_name='freelancer',null=True) 

    description = models.TextField() 
    language_tuple = models.ForeignKey(LanguageTuple,related_name='language_tuple') 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

    is_active = models.BooleanField(default=False) 
    has_translator = # If translator is not None/Null, then True else False 
+0

Вам действительно нужно поле, хранящееся в db для этого? Почему не просто свойство модели? –

+0

Метод 'super' называется in-to, чтобы сделать все остальное. И обратите внимание, что' self.subject_init = self.subject_initials() 'на ссылке должен модифицировать self obj. Это модифицированное «я» передается супер-методу. –

ответ

3

Вы можете просто добавить его как свойство, оно не имеет никакого смысла, чтобы добавить его в поле, так как вы можете просто фильтр на основе переводчика, если вам это нужно в QuerySet, и что-нибудь еще который не связан с базой данных, просто используйте свойство

@property 
def has_translator(self): 
    return self.translator_id is not None 
+1

Как ни крути, было бы лучше использовать 'self.translator_id' здесь, чтобы он не вызывал ненужный db-запрос, когда есть значение. –

+0

Кажется, что это работает, но я не уверен, могу ли я назвать это свойство в шаблонах атрибутами. job.has_translator ... –

+0

@ DanielRoseman - Согласен, спасибо! – Sayse

Смежные вопросы