【问题标题】:Django CreateView - How to show a related field (FK) like integer instead of select?Django CreateView - 如何显示整数而不是选择的相关字段(FK)?
【发布时间】:2017-02-06 19:28:23
【问题描述】:

嗨(抱歉我的英语不好),我正在尝试使用数字输入而不是在 django 模型的 FK 关系中选择来显示表单,但我做不到。

问题是我需要在输入框中手动填写产品的 ID,但 django 会自动为所有产品制作选择表单!

这就是我在 forms.py 中的内容

class PurchaseForm(forms.ModelForm):
    class Meta:
        model = Purchase
        fields = [
            'date',
            'supplier',
            'warehouse',
        ]
        widgets = {
            'date': forms.DateInput(attrs={
                    'type': 'date',
                }),
        }


class PurchaseItemForm(forms.ModelForm):
    class Meta:
        model = PurchaseItem
        fields = [
            'product',
            'quantity',
            'net_purchase_price',
            'sell_price',
        ]

        widgets = {
            'product': forms.NumberInput(),
        }


PurchaseFormSet = inlineformset_factory(
        Purchase,
        PurchaseItem,
        fields='__all__',
        extra = 10,
    )

这是我的看法

class PruchaseCreateView(CreateView):
    template_name = 'purchases/create_purchase.html'
    form_class = PurchaseForm

    def get_context_data(self, **kwargs):
        context = super(PruchaseCreateView, self).get_context_data(**kwargs)
        if self.request.POST:
            context['formset'] = PurchaseFormSet(self.request.POST)
        else:
            context['formset'] = PurchaseFormSet()
        return context

    def form_valid(self, form):
        context = self.get_context_data()
        formset = context['formset']
        if formset.is_valid():
            self.object = form.save()
            formset.instance = self.object
            formset.save()
            return redirect(self.object.get_absolute_url())  
        else:
            return self.render_to_response(self.get_context_data(form=form))

我尝试使用小部件 NumberInput 但没有!有什么想法吗?

【问题讨论】:

    标签: django django-forms django-generic-views


    【解决方案1】:

    调用inlineformset_factory时需要包含自定义表单:

    PurchaseFormSet = inlineformset_factory(
        Purchase,
        PurchaseItem,
        form=PurchaseItemForm
        fields='__all__',
        extra = 10,
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 2018-04-21
      • 1970-01-01
      • 2018-12-30
      • 2013-11-28
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      相关资源
      最近更新 更多