具有ImageField属性的{Django UpdateView}

时间:2015-07-22 01:41:41

标签: python django django-models django-forms django-views

我在制作UpdateView Class时遇到了麻烦。在添加imageField之前,我可以在不添加任何表单的情况下执行createView和UpdateView。但是现在我有了imageField,这就产生了问题。幸运的是,我能够创建createView并且工作正常。

以下是我的CreateView代码

class CreatePostView(FormView):
    form_class = PostForm
    template_name = 'edit_post.html'

    def get_success_url(self):
        return reverse('post-list')
    def form_valid(self, form):
        form.save(commit=True)
        # messages.success(self.request, 'File uploaded!')
        return super(CreatePostView, self).form_valid(form)
    def get_context_data(self, **kwargs):
        context = super(CreatePostView, self).get_context_data(**kwargs)
        context['action'] = reverse('post-new')
        return context

但是,我尝试做UpdateView(ViewForm)。以下是我的代码:

class UpdatePostView(SingleObjectMixin,FormView):
model = Post
form_class = PostForm
tempate_name = 'edit_post.html'

# fields = ['title', 'description','content','published','upvote','downvote','image','thumbImage']

def get_success_url(self):
    return reverse('post-list')
def form_valid(self, form):
    form.save(commit=True)
    # messages.success(self.request, 'File uploaded!')
    return super(UpdatePostView, self).form_valid(form)

def get_context_data(self, **kwargs):
    context = super(UpdatePostView, self).get_context_data(**kwargs)
    context['action'] = reverse('post-edit',
                                kwargs={'pk': self.get_object().id})
    return context

当我尝试运行updateView时,它给出了以下错误:

  

/ posts / edit / 23 /

中的AttributeError      

' UpdatePostView'对象没有属性' get_object'

     

请求方法:GET请求URL:     http://localhost:8000/posts/edit/23/ Django版本:1.8.2异常   类型:AttributeError异常值:

     

' UpdatePostView'对象没有属性' get_object'

     

异常位置:/home/PostFunctions/mysite/post/views.py in   get_context_data,第72行Python可执行文件:/ usr / bin / python Python   版本:2.7.6

以下是我的url.py:

#ex : /posts/edit/3/

url(r'^edit/(?P<pk>\d+)/$', post.views.UpdatePostView.as_view(),
    name='post-edit',),

1 个答案:

答案 0 :(得分:2)

我有一个用ImageField更新Model的表单。 我为我的模型扩展了一个ModelForm(我猜你是PostForm)。

但我的CustomUpdateView扩展了UpdateView,来自django通用视图。

from django.views.generic.edit import UpdateView
from django.shortcuts import get_object_or_404


class CustomUpdateView(UpdateView):
    template_name = 'some_template.html'
    form_class = CustomModelForm
    success_url = '/some/url'

    def get_object(self): #and you have to override a get_object method
        return get_object_or_404(YourModel, id=self.request.GET.get('pk'))

您只需定义一个get_object方法,更新视图将使用表单中的值更新对象,但它需要获取您要更新的对象。

get_object_or_404()与模型上的get()函数类似,因此请将id替换为field_id的名称。

希望有所帮助