【问题标题】:How to pass object by id after saving from form using redirect?使用重定向从表单保存后如何通过 id 传递对象?
【发布时间】:2021-04-06 01:52:55
【问题描述】:

很抱歉问这个问题。我描述了一个通过表单上传图像的服务。底线是,成功下载(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, 'add_picture.html', 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'),
]

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

【问题讨论】:

    标签: python-3.x django redirect django-urls django-url-reverse


    【解决方案1】:

    id可以从form.save()的结果中得到:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多