モデルデータの遷移を制御する方法について考えていました。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()メソッドで「Published」と「Draft」を使用してみましたが、機能しませんでした。
clean_statusを適切な場所に配置していますか?私は何かを見落としていますか?