如何在Django中将默认值设置为扩展模型?

时间:2014-01-26 12:47:02

标签: django django-models mezzanine

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

1 个答案:

答案 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,将这个功能添加到任何类。