Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.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/21.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中的下拉选项_Python_Django_Psql - Fatal编程技术网

Python 没有与给定查询匹配的项:Django中的下拉选项

Python 没有与给定查询匹配的项:Django中的下拉选项,python,django,psql,Python,Django,Psql,我之前问过这个问题,但现在我很难确定如何为多表单视图的其中一个表单使用下拉列表(或者更好的是,自动填充字段) 游戏中的模型包括书籍、书籍细节和体裁。BookDetails是一个指向流派(和其他类似表格)的链接表,这样我就可以有一个静态的流派列表,以及BookDetails的唯一ID和外键 现在我有这个: #views.py def BookFormView(request): genre = Genre.objects.all() if request.meth

我之前问过这个问题,但现在我很难确定如何为多表单视图的其中一个表单使用下拉列表(或者更好的是,自动填充字段)

游戏中的模型包括书籍、书籍细节和体裁。BookDetails是一个指向流派(和其他类似表格)的链接表,这样我就可以有一个静态的流派列表,以及BookDetails的唯一ID和外键

现在我有这个:

#views.py
def BookFormView(request):
        genre  = Genre.objects.all()
        if request.method == "POST":
            book_form = BookForm(request.POST, prefix='book')
            bookdetails_form = BookDetailsForm(request.POST, prefix='bookdetails')
            selected_genre = get_object_or_404(Genre, pk=request.POST.get('genre_id'))
            genre.id = selected_genre
            genre.save()
            if book_form.is_valid() and bookdetails_form.is_valid():
                book_form.save()                    
                bookdetails_form.save()
                return HttpResponseRedirect("/books/")  
        else:
            book_form = bookForm(prefix='book')
            bookdetails_form = BookDetailsForm(prefix='bookdetails) 
        return render(request,  'books/createbook.html',
            {'book_form' : book_form, 
             'bookdetails_form': bookdetails_form,
             'genre':genre,})

#createbook.html
<select name="genre", id="genre" form="bookform">
        {% for entry in genre %}
            <option value="{{ entry.id }}">
                {{ entry.name }}
            </option>
        {% endfor %}
 </select>
#views.py
def BookFormView(请求):
genre=genre.objects.all()
如果request.method==“POST”:
book\u form=BookForm(request.POST,前缀为'book')
bookdetails\u form=bookdetails表单(request.POST,前缀='bookdetails')
所选类型=获取对象或404(类型,pk=request.POST.get('genre\u id'))
genre.id=所选类型
类型保存()
如果book\u form.is\u valid()和bookdetails\u form.is\u valid():
book_form.save()
bookdetails_表单保存()
返回HttpResponseRedirect(“/books/”)
其他:
图书形式=图书形式(前缀为“图书”)
bookdetails\u form=BookDetailsForm(prefix='bookdetails)
返回呈现(请求'books/createbook.html',
{'book_form':book_form,
“bookdetails\u表单”:bookdetails\u表单,
“流派”:流派,})
#createbook.html
{%用于类型%]中的条目}
{{entry.name}
{%endfor%}

表单正确地显示在页面上,下拉菜单中包含来自数据库的选项。然而,当我点击submit将信息存储到数据库时,我得到一个错误,说
没有与给定查询匹配的类型
其他帖子,因此这个错误似乎不是来自相同的上下文。我认为这可能与选择一个名称但存储一个id有关(对于类型),但否则我就不知所措了。

通常,在django中使用表单的方法不是手动从
POST
dict中提取内容,而是使用
modelcoocefield

你没有那样做有什么特别的原因吗

此外,您似乎将
类型
变量错误地用于两种不同的事情。您可以使用queryset对其进行初始化,但随后在代码中尝试将其视为
类型
实例。这将导致问题,更不用说我不认为你的
genre.id=…
行会达到你期望的效果

此外,函数名使用标题大小写也违反了样式约定。如果您打算用Python编写大量代码,那么这里可能值得一看官方认可的PEP8风格指南:


代码中还有一些其他问题,但我不确定是否值得指出。

@w下面这可能是您的最佳反馈,谢谢。看起来我确实应该使用ModelChoiceField。我会看一下样式指南,然后用正确的词汇报告我试图做的事情。@Nancy我对样式指南的唯一观点是说
def BookFormView…
应该是
def book\u form\u view…
。另外,如果你觉得我的答案解决了你的问题,你应该点击旁边的复选框接受它和/或点击向上箭头向上投票。这当然很有帮助,但我的代码还是一样的。我正在使用你提到的资源,但我还不知道我的问题是否解决了。