首页 > 解决方案 > 如何在基于单个类的视图中实现搜索表单和发布创建表单

问题描述

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

视图.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. 当提交的搜索表单从数据库中加载相应的结果

标签: pythondjangodjango-formsmultiple-formssearch-form

解决方案


推荐阅读