Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 是否可以在ListView模板中包含表单?_Django_Django Class Based Views_Class Based Views - Fatal编程技术网

Django 是否可以在ListView模板中包含表单?

Django 是否可以在ListView模板中包含表单?,django,django-class-based-views,class-based-views,Django,Django Class Based Views,Class Based Views,我构建了一个listview,它可以很好地工作并提供我想要的东西 在这个ListView的模板中,我声明了一个指向CreateView的表单。 形式是这样的, {% if user.is_authenticated %} <form action="{% url 'post_wall' %}" method="POST"> {% csrf_token %} <input type='text' name='body' /> <input ty

我构建了一个listview,它可以很好地工作并提供我想要的东西

在这个ListView的模板中,我声明了一个指向CreateView的表单。 形式是这样的,

{% if user.is_authenticated %}
<form action="{% url 'post_wall' %}" method="POST">
    {% csrf_token %}
    <input type='text' name='body' />
    <input type='hidden' name='from_user' value='{{ user.id }}' />
    <input type='hidden' name='to_user' value='{{ to_user }}' />
    <input type='submit' value='POST'/>
</form>
{% endif %}
包含表单的url为

url(r'accounts/wall/(?P<slug>\w+)/$', WallList.as_view(), name='wall'),
这给了我一个机会

TemplateDoesNotExist at /accounts/post_wall
users/wallpost_form.html

当帖子被发送到CreateView时,这不应该正常工作吗?还是我误解了CBV的某些内容?

是的,但是所有的表单处理都必须由
列表视图本身完成。这很简单,因为您可以从
ModelFormMixin
继承行为。您只需要一个url(指向列表视图)。该模板将如下所示:

{% if user.is_authenticated %}
<form action="" method="POST">
    {% csrf_token %}
    {{ form }}
    <input type='submit' value='POST'/>
</form>
{% endif %}

这很有效。如果我要为列表视图过滤我的内容,我是否必须通过跳过“获取查询设置”来做到这一点?是的,您可以像定制普通的
列表视图一样对其进行自定义。非常感谢先生!
TemplateDoesNotExist at /accounts/post_wall
users/wallpost_form.html
{% if user.is_authenticated %}
<form action="" method="POST">
    {% csrf_token %}
    {{ form }}
    <input type='submit' value='POST'/>
</form>
{% endif %}
from django.views.generic.list import ListView
from django.views.generic.edit import ModelFormMixin

class ListWithForm(ListView, ModelFormMixin):
    model = MyModel
    form_class = MyModelForm

    def get(self, request, *args, **kwargs):
        self.object = None
        self.form = self.get_form(self.form_class)
        # Explicitly states what get to call:
        return ListView.get(self, request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        # When the form is submitted, it will enter here
        self.object = None
        self.form = self.get_form(self.form_class)

        if self.form.is_valid():
            self.object = self.form.save()
            # Here ou may consider creating a new instance of form_class(),
            # so that the form will come clean.

        # Whether the form validates or not, the view will be rendered by get()
        return self.get(request, *args, **kwargs)

    def get_context_data(self, *args, **kwargs):
        # Just include the form
        context = super(ListWithForm, self).get_context_data(*args, **kwargs)
        context['form'] = self.form
        return context