使用重定向从表单保存后如何通过 id 传递对象?

问题描述

我很抱歉问这个。我描述了一种通过表单上传图像的服务。最重要的是,在成功下载(add_picture)后,我必须进入图像页面(picture_detail)。我不明白为什么我不能转移ID。我做了以下事情:

models.py:

class Picture(models.Model):
    url = models.URLField(blank=True,verbose_name='Ссылка на изображение')
    image = models.ImageField(upload_to='pictures/%Y/%m/%d',width_field='image_width',height_field='image_height',blank=True,verbose_name='Изображение')

def get_absolute_url(self):
    return reverse('home:picture_detail',args=[self.id])

views.py:

def add_picture(request,id=None):
    picture = Picture.objects.filter(is_active=True)
    # picture_form = None
    # picture = get_object_or_404(Picture,id=id)
    if request.method == 'POST':
        form = PictureCreateForm(data=request.POST,files=request.FILES)
                if form.is_valid():
        form.save()
        picture_id = form.save()
        request.session['id'] = picture_id.id
        id = request.session.get('id')
        return HttpResponseRedirect(reverse('home:picture_detail',kwargs={'id': id}))
        else:
            return render(request,'add_picture.html',locals())
    else:
        form = PictureCreateForm()

    return render(request,locals())

urls.py:

urlpatterns = [
    path('',views.home,name='home'),path('add_picture/',views.add_picture,name='add_picture'),path('picture_detail/<int:id>/',views.picture_detail,name='picture_detail'),]

Bug report

因此,我应该进入这样的页面

Such page should be based on the ID after saving the form

解决方法

可以从form.save()的结果中获取id:

from django.shortcuts import redirect

# …

if form.is_valid():
    item = form.save()
    return redirect('home:picture_detail',id=item.id)
# …
,

万岁!我管理。所需要做的就是将 id 传递给会话。我已经更正了我的代码并且它有效。查看 views.py

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...