KeyError,异常值:'对象'

桑杰

项目图片1

我正在研究 Django。我收到以下错误。尽管增加了很多,但我没有找到解决方案。请参考此链接进行追溯

views.py 中的代码

class UpdateVote(LoginRequiredMixin,UpdateView):
    form_class = VoteForm
    queryset = Vote.objects.all()

    def get_object(self,queryset=None):
        vote = super().get_object(queryset)
        user = self.request.user
        if vote.user != user:
            raise PermissionDenied('can not change another user vote')
        return vote
    def get_success_url(self):
        movie_id = self.object.movie.id
        return reverse('core:movie_detail', kwargs={'pk':movie_id})
    def render_to_response(self, context, **response_kwargs):
        movie_id = context['object'].id
        movie_detail_url = reverse('core:movie_detail',kwargs={'pk':movie_id})
        return redirect(to=movie_detail_url)

class MovieDetail(DetailView):
    queryset = Movie.objects.all_with_prefetch_persons()
    def get_context_data(self, **kwargs):
        ctx = super().get_context_data(**kwargs)
        if self.request.user.is_authenticated:
            vote = Vote.objects.get_vote_or_unsaved_blank_vote(movie=self.object,user=self.request.user)
            if vote.id:
                vote_url_form = reverse('core:UpdateVote',kwargs={'movie_id':vote.movie.id,'pk':vote.id})
            else:
                vote_url_form = (reverse('core:create_vote',kwargs={'movie_id':self.object.id}))
            vote_form = VoteForm(instance=vote)
            ctx['vote_form'] = vote_form
            ctx['vote_url_form'] = vote_url_form
        return ctx

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',)

网址.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'),
]

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 %}
美国

您的UpdateVote视图正在使用,VoteForm并且该视图上的查询集来自Vote模型,因此object该视图内字段是Vote模型的实例,而不是Movie模型。

此代码movie_id = context['object'].id也不起作用,因为上下文可能未包含objectUpdateVote视图中,从而导致错误KeyError, Exception Value: 'object'您可以movie_id通过kwargsfield inside UpdateVoteview获得因为您已经movie_id在路径中定义了。

有了这个:

path('movie/<int:movie_id>/vote/<int:pk>', UpdateVote.as_view(), name='UpdateVote'),

您的视图可以使用kwargs如下方式获取值

class UpdateVote(LoginRequiredMixin,UpdateView):
    form_class = VoteForm
    queryset = Vote.objects.all()

    def get_object(self,queryset=None):
        vote = super().get_object(queryset)
        user = self.request.user
        if vote.user != user:
            raise PermissionDenied('can not change another user vote')
        return vote

    def get_success_url(self):
        movie_id = self.kwargs.get('movie_id')
        return reverse('core:movie_detail', kwargs={'pk':movie_id})

    def render_to_response(self, context, **response_kwargs):
        movie_id = self.kwargs.get('movie_id')
        movie_detail_url = reverse('core:movie_detail',kwargs={'pk':movie_id})
        return redirect(to=movie_detail_url)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django异常类型:KeyError异常值:'pk'

来自分类Dev

异常值:“ NoneType”对象没有属性“ endswith”

来自分类Dev

异常值:“表单”对象没有属性“属性”

来自分类Dev

异常值:“NoneType”对象没有“rfind”属性

来自分类Dev

Django Admin,不能按以下项分组:异常值:'dict'对象没有属性'_meta'

来自分类Dev

Python / Django-异常值:“ WSGIRequest”对象没有属性“ Meta”

来自分类Dev

异常值:“ NoneType”对象没有属性“ add”,类别名称未显示Django

来自分类Dev

避免异常值:在Django信号中调用Python对象时,超出了最大递归深度

来自分类Dev

Django Admin,不能按以下项分组:异常值:'dict'对象没有属性'_meta'

来自分类Dev

Django + Haystack:异常值:'module'对象没有属性'get_model'

来自分类Dev

异常值返回NA

来自分类Dev

从mktime()返回的异常值

来自分类Dev

如何去除异常值

来自分类Dev

异常值比较日期时间

来自分类Dev

在组中查找“异常值”

来自分类Dev

Python中的异常值校正

来自分类Dev

PHP / MYSQL的异常值浮动

来自分类Dev

在SQL中查找异常值

来自分类Dev

使用ELKI的异常值检测

来自分类Dev

从 DataFrame 中过滤异常值

来自分类Dev

抛出非异常对象

来自分类Dev

junitparameter类的异常对象

来自分类Dev

系统对象处理异常

来自分类Dev

无法转换类型异常的对象

来自分类Dev

异常安全返回Autoclosable对象

来自分类Dev

JavaScript的Set对象的异常行为

来自分类Dev

在事件中提供异常对象

来自分类Dev

未使用对象中的异常

来自分类Dev

Android空对象引用异常