如何检查Django(Django admin)中的值转换?(再次访问)

如何检查Django(Django admin)中的值转换?(再次访问),django,django-models,django-admin,django-forms,django-validation,Django,Django Models,Django Admin,Django Forms,Django Validation,我想知道如何控制模型数据中的转换。我在上找到了解决方案,但当我试图在代码中实现它时,出现了一些问题(我可以更改状态而不受惩罚): 以下是我的代码的相关部分: # Blog Entry Draft Status Constants ENTRY_STATUS_DRAFT = 0 ENTRY_STATUS_PUBLISHED = 1 # Create your models here. class Blog(models.Model): title = models.CharField(ma

我想知道如何控制模型数据中的转换。我在上找到了解决方案,但当我试图在代码中实现它时,出现了一些问题(我可以更改状态而不受惩罚):

以下是我的代码的相关部分:

# 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()方法中使用“Published”和“Draft”,但没有成功


我把清洁状态放在正确的位置了吗?我忽略了什么吗?

您的clean方法应该返回
self.cleaned_数据
,就像
clean_状态
返回
self.cleaned_数据['status']
:)

刚刚试过这个。。。没用。。。出现错误:“'Blog'对象没有属性'cleaned_data'”。追溯到