【问题标题】:Django| Multiple forms on one page - Which buttons been pressed姜戈|一页上的多个表单 - 按下了哪些按钮
【发布时间】:2020-10-27 03:07:30
【问题描述】:

在锁定期间开始编码,所以我很新,我所做的可能是一个丑陋的怪物,所以要小心。任何帮助将不胜感激,因为谷歌在我需要的时候抛弃了我。

我在引导模式中添加了一个表单,它可以是电影/电视/书籍。我的问题是它总是认为它的电视。当它有 3 个不同的 URL 和 3 个单独的 POST 请求时,这一切都有效,但我想感觉很花哨。

我试图用 3 个按钮告诉它它的“area_type”是什么,使用按钮名称和 POST。

<div class="btn-group mr-2" role="group" aria-label="second group">
                <div class="dropright">
                    <a class="btn btn-primary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown"
                        aria-haspopup="true" aria-expanded="false">
                        Add Items
                    </a>
                
                    <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
                        <a class="dropdown-item" data-toggle="modal" data-target="#exampleModal" name="Film">Add Film</a>
                        </form>
                        <a class="dropdown-item" data-toggle="modal" data-target="#exampleModal" name="TV">Add TV</a>
                        <a class="dropdown-item" data-toggle="modal" data-target="#exampleModal" name="Book">Add Book</a>
                    </div>
                </div>
            </div>



<div class="form-group">
        <form action="/{{franchises_details.franchise_slug}}/{{area|lower}}" method="POST" enctype="multipart/form-data">
            <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
                <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                    </div>
                    <div class="modal-body">
                        {% csrf_token %}
                        {{franchises_details.franchies_name}}: {{area}}
                        {{form.name}}
                        {% if not area == "Film" %}
                            Number of Ep:{{form.number_of_episodes}}
                        {% endif %}                    
                    <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                    <input type="submit" class="btn btn-primary" value="Film" name="Film"/>
                    </div>
                </div>
                </div>
                </div>
            </div>
        </form>
    </div>

我在获取请求时将其设置为“TV”(仅因为当我将其留空时它倒塌了),我认为这是我的问题的第一部分。在发布请求时,我会检查按钮名称。

def franchise_details(request,franchise_slug):    
    franchises_details = Franchise.objects.get(franchise_slug=franchise_slug)
    form_type = forms.CreateFranchiseItemEp
    if request.method == 'POST':
        if "Film" in request.POST:
            area = "Film"
            form_type = forms.CreateFranchiseItemNoEp
        if "TV" in request.POST:
            area = "TV"
            form_type = forms.CreateFranchiseItemEp
        if "Book" in request.POST:
            area = "Book"
            form_type = forms.CreateFranchiseItemNoEp
        form = form_type(request.POST)
        if form.is_valid():
            form_instance = form.save(commit=False)
            form_instance.author = request.user
            form_instance.franchies_name_id = franchises_details.id
            form_instance.area_type = area
            if area == "Film":
                form_instance.number_of_episodes = 0
            if area == "Book":
                form_instance.number_of_episodes = 0
            form_instance.all_user_average = 0
            form_instance.save()
            return redirect('/' + franchises_details.franchise_slug)
    else:       
        form = form_type() 
        area = "TV"
       
    return render(request, 'franchises_details.html', {'franchises_details': franchises_details, 'franchises_user': franchises_user, 'franchise_items_films':franchise_items_films, 'franchise_items_tvs':franchise_items_tvs,'franchise_item_users_film':franchise_item_users_film,'franchise_item_users_tv':franchise_item_users_tv, 'form':form,'area':area})

这里通常有更多内容,但我将其删除,因为它有点忙,我认为这是唯一相关的部分。

在我看来,我的“如果 request.POST: 中的“电影/电视/书籍”:”什么也没做。问题是这是 what the intent is suggesting I do 。以太币我把它搞砸了,或者它不再是一个东西,但我在这个阶段完全迷失了。

tl;dr 我按的是哪个按钮?我按下电影按钮它认为它的电视。它作为具有相同变量的单独 URL 工作

正如我所说,任何帮助都会很棒,因为我大部分时间都在学习一半的知识并复制粘贴

【问题讨论】:

    标签: python django django-models django-forms django-views


    【解决方案1】:

    当我开始使用 Django 时,我遇到了类似的问题。我正在为一家餐厅构建一个预订表格,我希望根据用户的输入动态更改该表格。

    问题是你想让后端控制前端逻辑,效率很低。

    你可以做两件事。

    1. 接受 Django 的内置视图是有限的,你不能做花哨的前端东西,所以用户体验会很糟糕。
    2. 或者您可以开始学习如何设置 Django-REST-Framework,这将是一个全新的世界。然后,您将 Django 保留为后端(仅)服务器,然后您可以使用 JavaScript 进行前端逻辑,例如。最容易学习的 JQuery。

    注意:如果您选择选项 2,那么将来您可以专注于学习 GraphQL,它是 REST 的更现代版本(但文档较少),以及 REACTjs 而不是 JQuery。而且我说是将来因为 REST 和 JQuery 比其他 2 更容易学习

    祝你编程好运,我希望这会有所帮助:)

    【讨论】:

    • 所以我可能是错的,但我不认为这是视图的问题,我不是想改变任何东西的可见性,只是我用电视/电影的 area_type 填写的内容/书。我认为更像是我的代码未能从 POST 中识别按钮名称,就像其他答案似乎暗示的那样。 stackoverflow.com/questions/2159795/… 再次,非常新,所以可能会在后端讨论
    【解决方案2】:

    好吧,原来我是个白痴。我一直在为电视设置的旧 URL 上运行此代码

    按钮名称也是 Film,所以我需要为每个提交添加一个按钮,但现在可以使用

    【讨论】:

    • :) 你有时是如何学习的。我仍然建议你在未来构建一个 API……;-) 祝你一切顺利! :-)
    • @mama haha​​ 谢谢,我得去看看。我有一个朋友一直在为一些与 ebay 相关的东西设置 REST,所以我可能会根据我对教程的了解程度来纠缠他
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多