1

私の現在の設定は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')

    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.pyviews.pyOrderDetailFormforms.pyinclude_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)

しかし、それはうまくいきませんでした。モデルのすべてのフィールドが含まれていました。問題はオブジェクト指向にあると思います。

ヒントや提案は大歓迎です。前もって感謝します!

4

2 に答える 2

1

Djangoコードを見ると、を使用してみることをお勧めしますself._meta.fields = tuple(include_fields)

于 2012-05-18T23:44:31.990 に答える
1

イニシャライザで変更self.fieldsし、シーケンスに見つからないマッピングのキーを削除する必要があります。

于 2012-05-19T03:59:23.883 に答える