Django KeyError,异常值:';对象';
一, 我在做Django。我得到下面的错误。我没有找到解决方案,尽管增加了很多 views.py中的代码 form.py中的代码 我已使用此表单链接到UpdateViewDjango 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
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 %}