Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Django KeyError,异常值:';对象';_Django_Django Forms_Django Views - Fatal编程技术网

Django KeyError,异常值:';对象';

Django KeyError,异常值:';对象';,django,django-forms,django-views,Django,Django Forms,Django Views,一, 我在做Django。我得到下面的错误。我没有找到解决方案,尽管增加了很多 views.py中的代码 form.py中的代码 我已使用此表单链接到UpdateView from django import forms from django.contrib.auth import get_user_model from .models import Movie,Vote class VoteForm(forms.ModelForm): user = forms.ModelChoice

一,

我在做Django。我得到下面的错误。我没有找到解决方案,尽管增加了很多

views.py中的代码 form.py中的代码 我已使用此表单链接到UpdateView

from django import forms
from django.contrib.auth import get_user_model
from .models import Movie,Vote
class VoteForm(forms.ModelForm):
    user = forms.ModelChoiceField(widget=forms.HiddenInput,queryset=get_user_model().objects.all(),disabled=True)
    movie = forms.ModelChoiceField(widget=forms.HiddenInput,queryset = Movie.objects.all(),disabled=True)
    value = forms.ChoiceField(widget=forms.RadioSelect,choices=Vote.VALUE_CHOICE)
    class Meta:
        model = Vote
        fields = ('value','user','movie',)
url.py 这是视图的url映射

from django.contrib import admin
from django.urls import path
from .views import MovieList,MovieDetail,PersonDetail,CreateVote,UpdateVote
app_name = 'core'
urlpatterns = [
    path('movies/', MovieList.as_view(), name='movie_list'),
    path('movie/<int:pk>/', MovieDetail.as_view(), name='movie_details'),
    path('person/<int:pk>/', PersonDetail.as_view(), name='person_details'),
    path('movie/<int:movie_id>/vote/', CreateVote.as_view(), name='create_vote'),
    path('movie/<int:movie_id>/vote/<int:pk>', UpdateVote.as_view(), name='UpdateVote'),
]
来自django.contrib导入管理
从django.url导入路径
from.views导入MovieList、MovieDetail、PersonDetail、CreateVote、UpdateVote
应用程序名称='核心'
URL模式=[
路径('movies/',MovieList.as_view(),name='movie_list'),
路径('movie/',MovieDetail.as_view(),name='movie_details'),
路径('person/',PersonDetail.as_view(),name='person_details'),
路径('movie//vote/',CreateVote.as_view(),name='create_vote'),
路径('movie//vote/',UpdateVote.as_view(),name='UpdateVote'),
]
HTML模板 这是我使用的模板

{% block sidebar %}
    <div>
    {% if vote_form %}
        <form action="{{vote_form_url}}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            {{ vote_form.as_p }}
            <button class="btn btn-primary" type="submit" >Vote</button>
        </form>
    {%  else %}
        <p>Login to vote for this movie</p>
    {% endif %} </div> {% endblock %}
{%block sidebar%}
{%if-vote_-form%}
{%csrf_令牌%}
{{投票形式为{p}}
选票
{%else%}
登录为这部电影投票

{%endif%}{%endblock%}
您的
UpdateVote
视图正在使用
VoteForm
,该视图上的查询集来自
Vote
模型,因此该视图中的
对象
字段是
Vote
模型的实例,而不是
Movie
模型

此代码
movie\u id=context['object'].id
也不起作用,因为
UpdateVote
视图的
object
中可能不包含上下文,这导致了错误
KeyError,异常值:'object'
。您可以通过
UpdateVote
视图中的
kwargs
字段获得
movie\u id
,因为您已经在路径中定义了
movie\u id

为此:

path('movie//vote/',UpdateVote.as_view(),name='UpdateVote'),
您的视图可以使用
kwargs
获得值,如下所示:

class UpdateVote(LoginRequiredMixin,UpdateView):
form_class=VoteForm
queryset=Vote.objects.all()
def get_对象(self,queryset=None):
vote=super().get_对象(queryset)
user=self.request.user
如果vote.user!=用户:
raise PermissionDenied('无法更改其他用户投票')
返回投票
def get_success_url(自我):
movie\u id=self.kwargs.get('movie\u id')
返回反向('core:movie_detail',kwargs={'pk':movie_id})
def呈现到应答(自身、上下文、**应答):
movie\u id=self.kwargs.get('movie\u id')
movie\u detail\u url=reverse('core:movie\u detail',kwargs={'pk':movie\u id})
返回重定向(至=电影\详细信息\ url)

嗨,桑杰,又是我。请提供回溯,以便我们可以跟踪错误来自何处(Hey@ToAnquecho:)我刚刚粘贴了回溯的链接,请查看。UpdateVote的对象不是电影对象,因此您无法通过类似的对象(
context['object'].id
)获取电影id。在URL中,您已经添加了
movie\u id
'movie//vote/'
),因此在这里,您可以通过
movie\u id=self.kwargs.get('movie\u id')
获得它,它正在工作,但即使在我投票后投票值也不会出现。这又是新的一页。我将添加屏幕截图,如果可能的话,请查看并建议以上评论作为答案。@Toankocho你能建议我如何成为django大师吗?请建议是否有任何关于django的内容、书籍或教程可供参考。@Sanjay,它应该在您单击按钮后更新。在
get\u vote\u或
方法中是否有延迟操作?顺便说一句,屏幕截图中的UI看起来与上面的模板代码不同。
{% block sidebar %}
    <div>
    {% if vote_form %}
        <form action="{{vote_form_url}}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            {{ vote_form.as_p }}
            <button class="btn btn-primary" type="submit" >Vote</button>
        </form>
    {%  else %}
        <p>Login to vote for this movie</p>
    {% endif %} </div> {% endblock %}