Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何访问post数据并与标准匹配_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python Django:如何访问post数据并与标准匹配

Python Django:如何访问post数据并与标准匹配,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我需要一些关于以下最佳实践实施的指导 我有一个场景,我正在构建一个应用程序,但如果它与某个“类别”或“区域设置”匹配,并希望将其重定向到中间的页面,则只需按照正常的路线 这是我的简单视图.py if form.is_valid(): ... kwargs = {'project_id':project_id, 'categories':request.POST['categories'], 'locale':request.POST['locale']} process_

我需要一些关于以下最佳实践实施的指导

我有一个场景,我正在构建一个应用程序,但如果它与某个“类别”或“区域设置”匹配,并希望将其重定向到中间的页面,则只需按照正常的路线

这是我的简单视图.py

if form.is_valid():
    ...
    kwargs = {'project_id':project_id, 'categories':request.POST['categories'], 'locale':request.POST['locale']}
    process_se(request, **kwargs)
    return HttpResponseRedirect(obj.next_url)
这是我的models.py文件中的内容,但它似乎非常不一致。 有没有更好的方法来处理这个请求

def process_se(self, request, **kwargs):
    if "All" or "Sweden" in kwargs['locale']:
        if "Technology" or "Internet" in kwargs['categories']:    
            next_url = request.build_absolute_uri(reverse('project_new_se', kwargs={'project_id': self.id}))
    else:
        next_url = request.build_absolute_uri(reverse('project_new_step2', kwargs={'project_id': self.id}))
    self.next_url = next_url
更新:

我使用的是
表单。ModelForm
类别
区域设置
多个域
我在壳中模拟了一个for,但似乎仍然没有得到结果

这是数据输出

f.cleaned_data
{'locale': [<Locale: Sweden>, <Locale: All>], 'categories': [<Category: Technology>, <Category: Internet>]}
f.u数据
{'locale':[,],'categories':[,]}

尽管根据您的解决方案,对表单中的字段运行此命令看起来非常好,但我最初建议将此代码放入表单类中,但ApPeL修改了问题,指出
locale
categories
是模型中的多对多字段。因此,现在我建议在您的模型中使用如下方法:

def requires_swedish_setup(self):
    """
    Return True if this project requires extra Swedish setup.
    """
    return (self.locale.filter(name__in = ('All', 'Sweden')).exists())
            and self.categories.filter(name__in = ('Technology', 'Internet')).exists())
然后像这样实现您的视图:

if form.is_valid():
    project = form.save()
    next = 'project_new_step2'
    if project.requires_swedish_setup():
        next = 'project_new_se'
    next_url = reverse(next, kwargs={'project_id': project.id})
    return HttpResponseRedirect(next_url)
一些注意事项:

  • 我假设
    Locale
    Category
    对象具有
    name
    字段(如果没有,则使用包含您正在测试的名称的任何字段)

  • 请求中读取表单数据不是一个好主意。POST
    (小部件还没有机会运行,而且还没有经过验证):最好使用
    表单。清除数据

  • 在这种情况下,您不需要调用
    request.build\u absolute\u uri
    :可以将
    reverse
    的结果直接提供给
    HttpResponseRedirect

  • “All”或“Sweden”在kwargs['locale']
    中可能不是您的意思:它的解析方式类似于
    “All”或(“Sweden”在kwargs['locale'])
    ,因此总是正确的


@garteh非常感谢您的详细描述,尽管在这一过程中它似乎仍然失败,这可能是因为我使用了许多字段-我在上面添加了一些额外的更新,非常感谢您的帮助!啊,我明白了:语言环境和类别是对象。所以你不能直接用字符串来比较它们,你必须用字符串来比较它们的名字。看看我的更新。勒根——等等——达里!工作起来很有魅力,编辑了一点,你需要在许多字段中有.all(),否则它会引发错误,还需要在视图中传递项目对象:)进一步思考后,我认为最好让数据库为你搜索。看我的修订。