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中的变量的主要内容,如果未能解决你的问题,请参考以下文章