2014-05-06 55 views
0
我在與一些領域,如訂單行對象

,參考號,狀態狀態控制/工作流在Django

狀態是選擇草案,並證實

我想要的是當該記錄的狀態被確認,其他字段不能修改/只讀

在django中做到這一點的最佳/常用方法是什麼? 謝謝

+0

您可以將該字段設置爲布爾字段。 – Mortezaipo

+0

@MortezaIpo哪個字段?爲什麼我應該把它設置爲布爾值? – user2469629

+0

你想在django管理員或任何地方使用它? – Mortezaipo

回答

0

我累了它與3個示例字段。

我創建3個字段的模型:

class New(models.Model): 
    title = models.CharField(max_length=100,unique=True) 
    body = models.TextField() 
    editable = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.title 

我forms.py代碼:

class MyNewForm(forms.ModelForm): 
    class Meta: 
     model = New 

    def clean(self): 
     cleaned_data = super(MyNewForm,self).clean() 
     title = cleaned_data.get('title') 
     body = cleaned_data.get('body') 
     editable = cleaned_data.get('editable') 

     if self.instance.pk: 
      try: 
       row = New.objects.get(id=self.instance.pk) 
      except New.DoesNotExist: 
       raise forms.ValidationError('Record not found') 

      if not row.editable and not editable: 
       raise forms.ValidationError('This record is not editable') 

     return cleaned_data 

我的admin.py代碼:

from news.models import New 
from news.forms import MyNewForm 
class MyNew(admin.ModelAdmin): 
    form = MyNewForm 

admin.site.register(New,MyNew) 

希望它爲你工作得很好。

+0

嘿,謝謝你的麻煩! :D 但我還有一件事要問。 該代碼僅用於驗證,如何將字段設置爲只讀形式? 謝謝:) – user2469629

+0

@ user2469629永遠不要這樣做,因爲如果你想編輯一行所有元素都是可讀的,你應該檢查'可編輯'元素,然後保存它,然後再次編輯。 – Mortezaipo

0

真假領域(即BooleanField)可以完成這項工作。在這裏閱讀文檔:https://docs.djangoproject.com/en/dev/ref/models/fields/#booleanfield

+0

@mevius對不起,但還是不明白, 該文件只是說,作爲一個存儲真/假的字段 它如何改變其他領域只讀狀態改變? – user2469629

+0

你可以使用諸如'confirmed = models.BooleanField(default = false)'之類的東西。然後你可以使用'if/else'語句來基本決定'如果確認,字段是可編輯的'。 – rnevius

+0

@mevius我應該在哪裏放置邏輯? 在自定義模板中還是在adminmodel中? – user2469629