0

Je me demandais comment contrôler les transitions dans les données du modèle. J'ai trouvé la solution à How to check value transition in Django (django-admin)? mais quand j'ai essayé de le mettre en œuvre dans mon code, quelque chose se passait mal (je suis en mesure de changer le statut en toute impunité):Comment vérifier la transition de valeur dans Django (django-admin)? (Revisited)

Voici la partie pertinente de mon code:

# Blog Entry Draft Status Constants 
ENTRY_STATUS_DRAFT = 0 
ENTRY_STATUS_PUBLISHED = 1 

# Create your models here. 
class Blog(models.Model): 
    title = models.CharField(max_length=200, unique=True) 
    body_html = models.TextField(blank=True) 
    pub_date = models.DateTimeField ('Date Published', blank=True, null=True, editable=False) 
    PUB_STATUS = (
     (ENTRY_STATUS_DRAFT, 'Draft'), 
     (ENTRY_STATUS_PUBLISHED, 'Published'), 
    ) 
    status = models.IntegerField(choices=PUB_STATUS, default=0) 

    def clean(self): 
     # Don't allow draft entries to have a pub_date. 
     if self.status == 'draft' and self.pub_date is not None: 
      raise ValidationError('Draft entries may not have a publication date.') 
     # Set the publication date for published items if it hasn't been set already 
     if self.status == ENTRY_STATUS_PUBLISHED and not self.pub_date: 
      self.pub_date = datetime.datetime.now() 

    def clean_status(self): 
     status = self.cleaned_data.get('status') 
     if status == ENTRY_STATUS_DRAFT: 
      if self.instance and self.instance.status == ENTRY_STATUS_PUBLISHED: 
       raise ValidationError('You cannot change published to draft') 
     return status 

La méthode clean() fonctionne. J'ai également essayé d'utiliser 'Published' et 'Draft' dans la méthode clean_status() mais cela n'a pas fonctionné. Est-ce que je mets clean_status au bon endroit? Est-ce que je regarde quelque chose?

Répondre

0

Votre méthode propre doit retourner le self.cleaned_data tout comme le clean_status renvoie le self.cleaned_data['status']. :)

+0

Juste essayé ceci ... n'a pas fonctionné ... J'ai eu une erreur: "L'objet 'Blog' n'a aucun attribut 'clean_data'". Traceback à http://dpaste.com/232983/ –

Questions connexes