Django在forms.py中使用视图或url中的变量

Posted

技术标签:

【中文标题】Django在forms.py中使用视图或url中的变量【英文标题】:Django use variable from view or url in forms.py 【发布时间】:2016-05-09 21:05:38 【问题描述】:

可以在 forms.py 中使用变量吗?我正在使用基于平台模型查询集的选择字段。我的 url 和 view 包含这个 id,但我不知道如何将它提供给 forms.py 到我的查询集。

forms.py:

class OrderCreateForm(forms.ModelForm):
    platform = forms.CharField(choices=Platform.objects.filter(client_id=variable_from_view_or_url).values_list('id', 'name').order_by('id'))

    class Meta:
        model = Order
        fields = ('price', 'deadline', 'finished', 'client', 'platform')

view.py:

@user_passes_test(lambda u: u.is_staff, login_url='/account/login/')
def order_create(request, request_client_id):
    dict = 

    dict['form_order'] = OrderCreateForm()
    return render(request, 'panel/order/form.html', dict)

【问题讨论】:

【参考方案1】:

是和不是。

你不能这样做,但你可以在表单的 init 方法中定义选项

def __init__(self, client_id, *args, **kwargs):
     super(OrderCreateForm, self).__init__(*args, **kwargs)
     self.fields['platform'].choices = Platform.objects.filter(client_id=client_id).values_list('id', 'name').order_by('id')

然后用 id 调用它

OrderCreateForm(request_client_id)

【讨论】:

注意,您也可以将其作为一个 kwarg 包含在内,然后仅在此 kwarg 存在时进行过滤,否则返回一系列默认选项。 是的,这很好用,谢谢!我还有一个关于初始的问题。我有来自 quryset 的记录,但我想添加像“-”这样的首字母,或者只是空选择,但也在表单中。我尝试在 init (self.initial['platform'] = '-') 中设置初始值,但这不起作用:( @BartoszPłóciennik - 不用担心,我想您的其他问题与 this 相同,但如果不是,您可能需要考虑提出新问题

以上是关于Django在forms.py中使用视图或url中的变量的主要内容,如果未能解决你的问题,请参考以下文章

纯Django表格绑定用户提交表格和视图

Django绑定表单无效,但未引发ValidationError

将变量从视图传递到表单 Django

:用户账户)

django中的日期时间选择器不使用forms.py

在 Django 中使用 AJAX 更新数据库