2009-05-22 48 views
0

我有一個模型MyModel,它包含一個PK - locid,它是一個AutoField。從模型中創建modelformset

我想構建從這個模型表單集,有一些注意事項:

  • 的表單集的查詢集應該是一個自定義(比如,ORDER_BY(「田」)),而不是所有的()
  • 由於MyModel的locid是一個AutoField,因此默認情況下是隱藏的,我希望能夠將它顯示給用戶。

我不知道該怎麼做。我已經嘗試了多種方法,

MyModelFormSet = modelformset_factory(MyModel, fields=('locid', 'name', 'dupof')) 

上面給了我3個字段,但locid是隱藏的。

class MyModelForm(ModelForm): 

    def __init__(self, *args, **kwargs): 
    super(MyModelForm, self).__init__(*args, **kwargs) 
    self.fields['locid'].widget.attrs["type"] = 'visible' 
    locid = forms.IntegerField(min_value = 1, required=True) 

    class Meta: 
    model = MyModel 
    fields = ('locid', 'name', 'dupof') 

以上給我ManyToMany錯誤。

有沒有人做過這樣的事情?


編輯

當我實例化的formset我現在可以使用自定義查詢 - 但我仍然需要顯示LOCID場給用戶,因爲該ID是應用程序的使用是重要的。我將如何做到這一點? 有沒有辦法來覆蓋隱藏PK的默認行爲,如果它的自動字段?

回答

2

向用戶顯示自動字段是沒有意義的,因爲它是一個自動增加的主鍵 - 用戶無法更改它,並且在將記錄保存到數據庫之前它不可用(DBMS選擇下一個可用的id)。

這是你如何設置自定義查詢集爲一個formset:

from django.forms.models import BaseModelFormSet 

class OrderedFormSet(BaseModelFormSet): 
    def __init__(self, *args, **kwargs): 
     self.queryset = MyModel.objects.order_by("field") 
     super(OrderedFormSet, self).__init__(*args, **kwargs) 

,然後你用在工廠功能表單集:

MyModelFormSet = modelformset_factory(MyModel, formset=OrderedFormSet) 
+0

嗯,需要對這種形式是,我希望能夠ATLEAST _show_用戶LOCID (即使它是隱藏的並且不能被修改)。你認爲最好的方法是什麼? – viksit 2009-05-22 20:03:21

0

如果你喜歡便宜的解決辦法,爲什麼不裂傷locid進入__unicode__方法?用戶保證看到它,並且不需要django-admin的特殊知識。

但公平地說,我對django-admin相關問題的回答都傾向於「不要緊張地將django-admin變成一個通用的CRUD界面」。

+0

其實,這是獨立的Django的管理界面 - 我認爲你的意思是服務器,而不是圖書館? – viksit 2009-05-26 21:34:06