• modelform动态显示select标签的对象范围


    既根据当前登录人,动态显示对象相关的的select的选项,例如 A登录,只显示A的客户,B登录,只显示B自己的客户

    先了解form的ModelChoiceField字段(这个表格没意义,就是引出参数queryset)

    class BookForm(forms.Form):
        title=forms.CharField(max_length=32)
        price=forms.IntegerField()
        pub_date=forms.DateField(widget=widgets.TextInput(attrs={"type":"date"}))
        #publish=forms.ChoiceField(choices=[(1,"AAA"),(2,"BBB")])
        publish=forms.ModelChoiceField(queryset=Publish.objects.all())  #单选
        authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all()) #多选

    默认是显示外键关联表的所有字段,queryset=objects.all()

    然后大多数用的是modelform,可以利用field.queryset,动态限制显示对象

    class ConsultRecordModel(forms.ModelForm):
        class Meta:
            model=ConsultRecord
            exclude=['delete_status']
        def __init__(self,request,*args,**kwargs):
            super().__init__(*args,**kwargs)
            self.fields['consultant'].queryset = UserInfo.objects.filter(pk=request.user.pk)
            self.fields['customer'].queryset = Customer.objects.filter(consultant=request.user)
            for field in self.fields.values():
                field.widget.attrs.update({'class':'form-control'})

    把想展示出来的用户,或者顾客,利用request.user,过滤出来 , 然后在赋值给相关字段的queryset( self.fields['consultant'].queryset ),这样,select展示出来的对象就是自己相关的对象了

    view视图一定要把request传过来,不然会飘红~~

    form = ConsultRecordModel(request, instance=obj)
  • 相关阅读:
    Go语言基础介绍
    webpack教程——css的加载
    Git忽略规则.gitignore梳理
    vue2.0路由-适合刚接触新手简单理解
    JAVA实现DES加密实现详解
    计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解
    Storm:最火的流式处理框架
    神片和神回复
    论C#未来发展
    弄清UTF8和Unicode
  • 原文地址:https://www.cnblogs.com/amber-liu/p/10002356.html
Copyright © 2020-2023  润新知