2016-06-09 84 views
1

我有一个模型,包含两个日期字段,用于提交和发布以及批准的布尔字段。在Django中使用管理站点

class BlogModel(models.Model): 
    title = models.CharField(max_length=100) 
    article = models.CharField(max_length=255) 
    pub_date = models.DateTimeField('date published') 
    submitted_date = models.DateTimeField('date submitted') 
    author = models.CharField(max_length=255) 
    approved = models.BooleanField(default=False) 
    def __str__(self):    # __unicode__ on Python 2 
      return 'approved, ' + str(self.approved) + ' article, ' + self.article 

我已将此模型包含在admin.py中。管理员可以批准文章,但是可以让pub_date成为管理员批准文章的当前时间吗?

UPDATE由西蒙·拉贾的建议

class BlogForm(forms.ModelForm): 
    class Meta: 
     model = BlogModel 
     fields = '__all__' 
     # fields = ('id', 'title', 'article') 

    def save(self, force_insert=False, force_update=False, commit=True): 
     m = super(BlogForm, self).save(commit=False) 
     # do custom stuff 
     m.pub_date = timezone.now() 
     if commit: 
      m.save() 
     return m 

和admin.py

class BlogModelAdmin(admin.ModelAdmin): 
    form = BlogForm 
    fields = ('title', 'article', 'pub_date', 'submitted_date', 'author', 'approved') 
    # fields = '__all__' won't work here, each field needs to be added individually as above 
    pass 
admin.site.register(BlogModel, BlogModelAdmin) 

感谢

回答

2

您可以覆盖形式对我forms.py这些模型工作保存在管理员

class BlogModelAdmin(admin.ModelAdmin): 
    form = BlogModelForm 
    pass 
admin.site.register(BlogModel, BlogModelAdmin) 

而且在forms

class BlogModelForm(ModelForm): 
    class Meta: 
     model = BlogModel 
     fields = '__all__' 

    def save(self, force_insert=False, force_update=False, commit=True): 
     m = super(BlogModelForm, self).save(commit=False) 
     # do custom stuff 
     m.pub_date = timezone.now() 
     if commit: 
      m.save() 
     return m 
1

可以通过在骑save_model方法在您的管理

def save_model(self, request, obj, form, change): 
    if obj.approved: 
     obj.pub_date = timezone.now() 

这可能是优于覆盖模式本身的保存方法。