Как проверить переход значения в Django (django-admin)?(Revisited) - PullRequest
0 голосов
/ 23 августа 2010

Мне было интересно, как управлять переходами в данных модели.Я нашел решение в Как проверить изменение значения в Django (django-admin)? , но когда я попытался реализовать его в своем коде, что-то пошло не так (я могу безнаказанно изменить статус):

Вот соответствующая часть моего кода:

# 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

Метод clean () работает.Я также пытался использовать «Опубликовано» и «Черновик» в методе clean_status (), но это не сработало.

Я помещаю clean_status в нужное место?Я что-то пропускаю?

1 Ответ

0 голосов
/ 24 августа 2010

Ваш метод очистки должен возвращать self.cleaned_data точно так же, как clean_status возвращает self.cleaned_data['status'].:)

...