如何在基于单个类的视图中实现搜索表单并发布创建表单

时间:2018-08-11 13:12:15

标签: python django django-forms multiple-forms search-form

我正在尝试同时实现搜索帖子和在单个视图中创建帖子。

views.py

class HomeView(TemplateView):
    template_name = 'home/home.html'

    def get(self, request):
        post_list = None
        form = HomeForm(self.request.GET or None)
        form1 = CommentForm(self.request.GET or None)
        posts = Post.objects.filter(user = request.user).order_by('-created')
        comments = Comment.objects.all()
        users = User.objects.exclude(id=request.user.id)
        query = request.GET.get('q')    
        if query:
                post_list = Post.objects.filter(
                        Q(post__icontains=query)
                        )
                context = {
                        'posts_list': post_list, }   
                print(post_list)
        args = {
            'form': form, 'posts': posts, 'users': users, 'form1':form1,
            'comments':comments,'post_list':post_list,
        }
        return render(request, self.template_name, args)

    def post(self, request):
        form1 = CommentForm()
        text = ''

        if request.method=='GET' and 'btn1' in request.POST:
            post_list = Post.published.all()
            query = request.GET.get('q')
            if query:
                post_list = Post.objects.filter(
                        Q(post__icontains=query)
                        )
                context = {
                        'posts_list': posts_list,
                                }
                return redirect('home:home')
        if request.method=='POST' and 'btn' in request.POST:
            form = HomeForm(request.POST,request.FILES)
            if form.is_valid():

                post = form.save(commit=False)
                post.user = request.user
                post.save()
                text = form.cleaned_data['post']
                form = HomeForm()
                form1 = CommentForm()
        return redirect('home:home')

html代码

 <form enctype="multipart/form-data" class="form-inline my-2 my-lg-0" action=".">
          <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name='q'>
          <button class="btn btn-outline-success my-2 my-sm-0" name="btn1" type="submit">Search</button>
{% block body %} 
<div class="container">
    <div class="col-md-8">
        <h2>Home</h2>
        <form  method="POST" enctype="multipart/form-data" type = 'file'>
            {% csrf_token %}
            {{ form.post }}
            {{ form.image }}
            <br>
            <button name="btn" type="submit">Submit</button>
        </form>
        <h2>{{ text }}</h2>
        {% for post in posts %}
           <a href="{% url 'home:Post_detail' pk=post.id %}"> <h1>{{post.id}}.{{ post.post }}</h1></a>
            <br>
            <img src="{{ post.image.url }}" width = 240 >
            <p>Posted by {{ post.user.get_full_name }} on {{ post.created }}</p>
        <!-- <form action="{% url 'home:cmnt' pk=post.id %}" method="POST" enctype="multipart/form-data" type = 'file'>
            {% csrf_token %}
            {{ form1.content }}
            <br>
            <button type="submit">Submit</button>
        </form> -->
                {{comments.count}} comment{{comments|pluralize}}<br>
              {% for comment in post.comment_set.all %}

                <small><b>{{ comment.comment }}</b></small>
                <p>commented by {{ comment.user.get_full_name }} on {{ comment.created }}</p>            
           {% endfor %}
        {% endfor %}

    </div>

</div>
{% endblock %}

从这段代码中,我得到用户输入的查询值。

实施此代码时,我需要同时填写创建后和搜索后的表格,但一次只需要提交一份表格 当我同时填写两个表单并提交时,我会得到这样的URL

http://127.0.0.1:8000/home/?q=django+&csrfmiddlewaretoken=OsNRlkvRjSHHuNYMxhZS9MFushCzCTZtjFvgEb5qFFybovBhWI3X0uufvd8bO8WS&post=asdsad&image=7653_1792089421024273_590924154993413545_n.jpg&btn=

我需要一个实现以下代码的代码:

  1. 在提交帖子创建表单时创建帖子并返回

  2. 提交的搜索表单从数据库中加载相应的结果

0 个答案:

没有答案