重写get_model_form方法,如何向验证的form传递request的值?

来源:16-3 如何定义编辑页面和新增页面的表单

多彩的云

2020-02-04

你好,bobby老师,请问xadmin重写get_model_form方法,如何向验证的form传递request的值呢?我这里有个需求是要求根据数据库来动态的设置model字段为choice的值,网上查询了资料,发现是需要重写form的init,重新查询一下数据库,从而达到动态设置choice的值,那么问题来了,我想要根据不同的用户,动态的显示choice不同的值,这里需要向form传递用户的信息,但是我发现如果直接传递,会报错 xxxform is not callable,
我不知道如何传递,请老师指点一下,代码如下

adminx中

def get_model_form(self):
    if self.org_obj is None:
        self.form = addMessageForm
        #如果这里写成下面的格式,会报错 addMessageForm is not callable
        #self.form = addMessageForm(request.user)
    return super(MessageAdmin, self).get_model_form()

addMessageForm中

class addMessageForm(forms.ModelForm):
    # 重写父类的 __init__ 方法
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['send_department'].widget.choices = Department.objects.values_list("id", "name")
        #我在这里想要根据传入的用户信息来过滤数据
        #self.fields['send_department'].widget.choices = Department.objects.filter(user=request.user).values_list("id", "name")

    title = forms.CharField(
        max_length=25,
        label="消息标题",
        help_text="请输入消息标题",
        error_messages={
            'max_length': '不能超过25个字符',
        })


    class Meta:
        model = Message
        fields = ("title", "send_department", "content")
写回答

2回答

bobby

2020-02-05

//img.mukewang.com/szimg/5e3abe58093282ab07640346.jpg 这里的值是写死的,你可以改成查询数据库 然后组装成这种格式不就行了吗

0
1
多彩的云
非常感谢!
2020-02-05
共1条回复

bobby

2020-02-05

0
1
多彩的云
不可以,他这个是静态的~choice写死的,我的是choice从数据库读取的,如果xadmin的form确实不能传入值,只能改用其他方式了
2020-02-05
共1条回复

Django+ xadmin 开发在线教育网站

一套通用的技术组合拳,助你解决大部分Python类网站后端问题

1911 学习 · 2149 问题

查看课程