2014-01-26 2 views
2

В Mezzanine проекте, я определил простую Photo модель, которая расширяет сердцевину Page модели:Как установить значения по умолчанию для расширенной модели в Django?

from django.db import models 
from mezzanine.pages.models import Page 

class Photo(Page): 
    image = models.ImageField(upload_to="photos") 
    #publish_date = models.DateTimeField(auto_now_add=True, blank=True) #problematic 

Когда я попытался повторно определить publish_date поля, я получил сообщение об ошибке:

django.core.exceptions.FieldError: Local field 'publish_date' in class 'Photo' clashes with field of similar name from base class 'Page' 

Я хочу избежать заполнения publish_date на странице администратора каждый раз, когда я создаю фотографию. Так интересно, как мне установить его на now(), не касаясь оригинальной модели Page?

+0

Хороший вопрос. Вы определенно не можете переопределить поле. Надеюсь, вам не нужно будет возиться с системой метакласса. –

ответ

1

Вы не можете изменить определение поля в производном классе модели - что, если базовый класс опирается на существующее поведение каким-либо образом?

То, что я хотел бы предложить это определить пользовательский метод сохранения() в классе Фото, который добавляет дату, а затем вызывает супер(), за исключением:

import datetime 
def save(self, *args, **kwargs): 
    if not self.pk: 
     # instance is being created. 
     self.publish_date = datetime.datetime.now() 
    super(Photo, self).save(*args, **kwargs) 

Если вы обнаружили, что делаете это много, вы можете создать mixin, который добавит эту функциональность в любой класс.

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