【问题标题】:CreateView with ListView in django init form在 django 初始化表单中使用 ListView 的 CreateView
【发布时间】:2018-07-09 23:33:14
【问题描述】:

我正在使用sigurdga/django-jquery-file-upload 处理多个上传图片,所以我想在用户进入页面时实现这一点。他上传的照片出现在页面中,有没有办法不初始化一个django CreateView,所有对象都像ListView一样显示?

我有这个创建视图:

class PictureCreateView(CreateView):
model = Picture
fields = "__all__"
template_name = 'fileupload/picture_form.html'
# form_class = PictureForm

# def get_initial(self):
#     initial = super(PictureCreateView, self).get_initial()
#     initial = initial.copy()
#     files = [serialize(p) for p in self.get_queryset()]
#     data = {'files': files}
#     response = JSONResponse(data, mimetype=response_mimetype(self.request))
#     response['Content-Disposition'] = 'inline; filename=files.json'
#     return response


def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.usuario_id = self.request.user.id
    self.object.save()
    usuario = User.objects.get(id=self.request.user.id)

    if usuario:
        photos = Picture.objects.filter(usuario_id=usuario.id)
        for photo in photos:
            photo.usuario_id = self.request.user.id
            photo.save()

    files = [serialize(self.object)]
    data = {'files': files}
    response = JSONResponse(data, mimetype=response_mimetype(self.request))
    response['Content-Disposition'] = 'inline; filename=files.json'
    return response

def form_invalid(self, form):
    data = json.dumps(form.errors)
    return HttpResponse(content=data, status=400, content_type='application/json')

列表视图

class PictureListView(ListView):
model = Picture
template_name = 'fileupload/picture_list.html'

HTML

{% extends "fileupload/upload_base.html" %}

{% block content %}
    <ul>
    {% for picture in object_list %}
        <img src="/media/{{ picture.file }}" />
    {% endfor %}
    </ul>
{% endblock %}

【问题讨论】:

    标签: django listview create-view


    【解决方案1】:

    一个快速的解决方案是使用 get_context_data 方法

     def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(PictureCreateView, self).get_context_data(**kwargs)
        # Add in a QuerySet of all the books
        context['pictures'] = Picture.objects.filter(usuario_id=self.request.user.id)
        return context
    

    模板.html

    {% extends "fileupload/upload_base.html" %}
    {% load static %}
    {% load upload_tags %}
    
    {% block content %}
        {% for picture in pictures %}
            <img src="/media/{{ picture.file }}" />
        {% endfor %}
    {%endlock%}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2011-08-05
      • 2023-03-20
      相关资源
      最近更新 更多