Django |一页上有多个表单,其中按钮被按下

2024-09-29 23:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我试着用3个按钮告诉它,它的“区域类型”使用的是按钮名和帖子

<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>

我在get请求中将它设置为“TV”(只是因为当我将它留空时它掉了下来),我认为这是我问题的第一部分。在post请求中,我检查按钮名称

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})

这里通常会有更多的内容,但我删除了这个问题,因为它有点忙,我认为这是唯一相关的部分

在我看来,我的“如果”电影/电视/书的请求。帖子:“什么都不做。问题是这是what the intent is suggesting I do。我把它搞砸了,或者它不再是一件事了,但我在这个阶段完全迷失了方向

tl;医生,我按的是哪个按钮?我按下电影按钮,它以为是电视。它作为单独的URL使用相同的变量

正如我所说的,任何帮助都将是令人惊奇的,因为我大部分都是靠一半的知识和复制粘贴工作


Tags: instancedivformdataifrequesttypearea
2条回答

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

此外,按钮的名称是电影,所以我需要一个按钮,每次提交,但它现在的工作

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

问题是,您希望让后端控制前端逻辑,这是非常低效的

你可以做两件事

  1. 接受Django的内置视图是有限的,并且你不能做花哨的前端工作,所以用户体验会很糟糕
  2. 或者你可以开始学习如何建立Django REST框架,这将是一个全新的世界。然后您将保持Django作为后端(唯一)服务器,然后您可以使用JavaScript作为前端逻辑,例如JQuery,这是最容易学习的

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

祝编程顺利,我希望这会有所帮助:)

相关问题 更多 >

    热门问题