在Mezzanine项目中,我定义了一个扩展核心Photo
模型的简单Page
模型:
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)
您无法更改模型的派生类中字段的定义 - 如果基类以任何方式依赖于现有行为会怎样?
我建议在Photo类中定义一个自定义save()方法,添加日期,然后调用super()保存:
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,将这个功能添加到任何类。