Я проектирую модель в Django, но я не знаю, является ли это лучшим способом. У меня есть модель под названием «История», и внутри этой модели у меня есть специализированная функция, которая будет обрабатывать вставки этой модели.Django - Функция внутри модели. Как назвать это с точки зрения?
Альтернатива 1
class History(models.Model):
field1 = models.ForeignKey(Request)
field2 = models.BooleanField()
field3 = models.DateTimeField()
def __unicode__(self):
return str(self.field1.id)
class Meta: #
ordering = ['-field3']
def insert_history(self):
# Here I will have some business logic to insert the data to the history model
Чтобы вставить данные в модель истории я ВСЕГДА должны использовать «insert_history» функцию.
Мои вопросы здесь:
Код выше правильно?
Если да, то как я могу назвать «insert_history» из представления?
Альтернатива 2
Я другой вариант, который я проверил, и он работает, но не чувствует себя правильный путь. Код выглядит следующим образом:
class History(models.Model):
field1 = models.ForeignKey(Request)
field2 = models.BooleanField()
field3 = models.DateTimeField()
def __unicode__(self):
return str(self.field1.id)
class Meta: #
ordering = ['-field3']
def insert_history(field1, field2, field3):
# Here I will have some business logic to insert the data to the history model
И я называю это с тем, как это:
from app.models import insert_history
insert_history('1', True, 'some_date')
, что это правильный способ сделать это? Если альтернатива 1 верна, как я могу назвать «insert_history» из представления?
С наилучшими пожеланиями,
Это не ясно из вашего кода, но делает insert_history все, что [manager.create()] (https://docs.djangoproject.com/en/1.4/ref/models/querysets/#create) не делает ? Если да, то какой пример функциональности? – ptr
Да, он установит поле3, дату и время, основанное на некоторой логике, которую я напишу внутри «insert_history». –
Надеюсь, вы действительно не вызываете свои поля 'field1',' field2' и 'field3' ...:) – Anentropic