2016-06-09 10 views
1

Ich habe ein Modell mit zwei Datumsfeldern, für eingereicht und veröffentlicht und ein boolesches Feld für genehmigt.Verwenden der Admin-Site in 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 

Ich habe dieses Modell in admin.py aufgenommen. Der Admin kann den Artikel genehmigen, aber ist es möglich, dass das pub_date der aktuelle Zeitpunkt ist, an dem der Artikel im admin genehmigt wurde?

UPDATE Diese Modelle für mich in forms.py arbeiten, wie von Raja Simon vorgeschlagen

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 

und 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) 

Dank

Antwort

2

Sie können Form außer Kraft setzen Speichern im Admin

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

Und in 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

möglich über die save_model Methode in Ihrem Admin-

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

Das Reiten ist wahrscheinlich überlegen die save-Methode in dem Modell selbst zu überschreiben.

Verwandte Themen