我目前在views.py
的設置是這樣如何在Django中外部設置ModelForm中的字段?
def order_detail(request, pk):
order = Order.objects.get(pk=pk)
# Define the can_something variables here.
include_fields = []
if can_edit_work_type:
include_fields.append('work_type')
if can_edit_vendor:
include_fields.append('vendor')
if can_edit_note:
include_fields.append('note')
class OrderDetailForm(forms.ModelForm):
class Meta:
model = Order
fields = tuple(include_fields)
form = OrderDetailForm(instance=order, data=request.POST)
return render(request, 'doors/order/detail.html', {'order': order, 'form': form})
很明顯,我認爲這是界定OrderDetailForm
內forms.py
,而不是views.py
最佳實踐。那麼如何將OrderDetailForm
移動到forms.py
並仍然通過include_fields
?
我想是這樣的,但它沒有工作
views.py
def order_detail(request, pk):
order = Order.objects.get(pk=pk)
# Define the can_something variables here.
include_fields = []
if can_edit_work_type:
include_fields.append('work_type')
if can_edit_vendor:
include_fields.append('vendor')
if can_edit_note:
include_fields.append('note')
form = OrderDetailForm(instance=order, data=request.POST, include_fields=include_fields)
return render(request, 'doors/order/detail.html', {'order': order, 'form': form})
forms.py
class OrderDetailForm(forms.ModelForm):
class Meta:
model = Order
def __init__(self, include_fields, *args, **kwargs):
super(OrderDetailForm, self).__init__(*args, **kwargs)
self.Meta.fields = tuple(include_fields)
但沒有工作;它包括模型上的所有字段。我假設問題是在面向對象方面。
歡迎任何提示或建議。提前致謝!
對不起,我不明白。你能告訴我一個例子嗎? – hobbes3
迭代'self.fields'。刪除不在序列中的鍵。 –
那麼'self.fields'是字典的列表?我不明白我是否想要做一些像'self.fields =('one','two')'或者我必須明確地設置類似'self.fields ['one'] = SomeFieldInput() '(但是如果我必須明確陳述現場輸入,那麼擁有'ModelForm'有什麼意義)。如果我做'class Meta:fields =()',那麼這意味着'self.fields'最初是空的? – hobbes3