Django forms:创建一个GET请求,该请求将实例化为一个表单

2024-04-25 22:34:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django2.1中,我试图真正地伪造一个GET请求,它将在重定向之后以最干巴巴的方式作为有效的形式进行解析。你知道吗

基本上,我在一个视图中(some_view下面),我想生成一个GET请求,而不必事先知道表单字段的序列化方式。你知道吗

你知道吗网址.py

path( r'select/', views.filtered_view, name='filter-view' )
path( r'save/', views.save_view, name='save-view' )

你知道吗视图.py

# a form class with 'non-trivial' fields (e.g. not ints)
class FilterForm(forms.Form):
    date = forms.DateInput()
    user = forms.ModelChoiceField(queryset=User.objects.all())

def filtered_view( request ):
    filter_form = FilterForm(request.GET)
    # do something with the form...

# another view somewhere 
def some_view(request):
    # this view does not contains GET or POST parameters related to FilterForm.
    ...
    user = User.objects.get( some_filter )
    date = compute_some_datetime_date_object

    # generates here a GET request that will instantiate the FilterForm 
    # correctly
    someargs = ...
    return redirect( 'filter-view' + someargs )

我知道我可以做一些像(跳过urllib.parse.urlencode…):

return redirect( 'filter-view' ) + \
  '?user='+ str(user_object.id) + \
  '&date' + date.strftime('%Y-%m-%d')

但它假设我知道pk用于传递user对象(取决于表单),并且我还知道用于日期的格式。。。你知道吗

我想做的是:

ff = FilterForm(data={'user':user_object,'date':date})
return redirect( 'filter-view' ) + ff.as_url_parameters()

谢谢你的帮助。你知道吗


Tags: formviewgetdatereturnobjectrequestsave