为了账号安全,请及时绑定邮箱和手机立即绑定

想要使用 __init__ 方法让登录用户(客户)过滤 Django From 下拉列表

想要使用 __init__ 方法让登录用户(客户)过滤 Django From 下拉列表

PIPIONE 2023-04-18 16:04:33
想要使用方法让登录用户(客户)过滤 Django From 下拉列表__init__。但是当提交表单时,继续让这个 Field idexpected a number 但得到 <QueryDict: { error:class OrderForm(ModelForm):    class Meta:        model = Order        fields = ['contract', 'quantity', 'status']                def __init__(self, customer, *args, **kwargs):        super(OrderForm, self).__init__(*args, **kwargs)        self.fields['contract'].queryset = Contract.objects.filter(customer=customer)    @login_required(login_url='login')def createOrder(request):    customer = request.user.customer.id    form = OrderForm(customer)    if request.method == 'POST':        form = OrderForm(request.POST)        if form.is_valid():            form = form.save(commit=False)            form.customer = request.user.customer            form.save()            messages.success(request, 'Ticket submitted successfully .')            return redirect('customer_table')    context = {'form':form}    return render(request, 'create-order.html', context)
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以像这样以形式传递任何属性


在视图中:


   form = OrderForm(request.POST, customer=request.user)

通知:


  def __init__(self, *args, **kwargs):

        customer = kwargs.pop('user') # allway before super() 

         # and call .pop() not .get() on kwargs, for upper class not evaluate user keyword


        super(OrderForm, self).__init__(*args, **kwargs)

        self.fields['contract'].queryset = Contract.objects.filter(customer=customer)



查看完整回答
反对 回复 2023-04-18
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

我将工作解决方案总结如下:


View.py


def createOrder(请求):


form = OrderForm(request.POST, customer=request.user.customer.id)


if request.method == 'POST':

    form = OrderForm(request.POST, customer=request.user.customer.id)

    if form.is_valid():

        form = form.save(commit=False)

        form.customer = request.user.customer

        form.save()

        messages.success(request, 'Ticket submitted successfully .')

        return redirect('customer_table')


context = {'form':form}


return render(request, 'create-order.html', context)

类 OrderForm(ModelForm):


class Meta:

    model = Order

    fields = ['contract', 'quantity', 'status']



def __init__(self, *args, **kwargs):

    customer = kwargs.pop('customer')

    super(OrderForm, self).__init__(*args, **kwargs)

    self.fields['contract'].queryset = Contract.objects.filter(customer__id=customer)



查看完整回答
反对 回复 2023-04-18
  • 2 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信