基于类的vi上的多个Django函数

2024-06-02 06:29:48 发布

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

我希望在同一个类中使用Multiple Django functions,并在同一个模板上显示这些函数。在

这两个函数都在我的Django模板中,但都不起作用,我不知道为什么。在

第一个功能:

这个函数允许根据3个条件在我的数据库中搜索一个人:firstnamelastname和{}。然后在数组中显示查询结果。在

第二个功能:

这个函数是一个简单的Django form。在

这是我第一次上Django课程:

class SocieteFormulaire(TemplateView) :

    template_name= "Societe.html"
    model = Societe


    def get_context_data(self, **kwargs):

        request = self.request

        if 'recherche' in request.GET:

            query_Lastname_ID = request.GET.get('q1LastnameID')
            query_Firstname_ID = request.GET.get('q1FirstnameID')
            query_BirthCity_ID = request.GET.get('q1BirthCityID')

            sort_params = {}

            set_if_not_none(sort_params, 'Lastname__icontains', query_Lastname_ID)
            set_if_not_none(sort_params, 'Firstname__icontains', query_Firstname_ID)
            set_if_not_none(sort_params, 'BirthCity__icontains', query_BirthCity_ID)

            query_list = Societe_Recherche.Recherche_Filter(Societe, sort_params)

            context = {
                "query_Lastname_ID" : query_Lastname_ID,
                "query_Firstname_ID" : query_Firstname_ID,
                "query_BirthCityID" : query_Birthcity_ID,
                "query_list" : query_list,
            }

            return context


    def get_context_data(self, **kwarg) :

        success = False
        request = self.request

        if request.method == 'POST':

            form = IndividuFormulaire(request.POST or None, request.FILES or None)

            if form.is_valid() :
                post = form.save(commit=False)
                for element in settings.BDD :
                    post.save(using=element, force_insert=True)

                messages.success(request, 'Le formulaire a été enregistré !')
                return HttpResponseRedirect(reverse('IndividuResume', kwargs={'id': post.id}))

            else:
                messages.error(request, "Le formulaire est invalide !")

        else:
            form = IndividuFormulaire()
            form.fields['Utilisateur'].initial = request.user.last_name + " " + request.user.first_name

        context = {
            "form" : form,
            "Individu" : Individu
        }

        return context

我用相同的名称命名了两个函数,因为如果我不这样做,第一个函数或我的表单就不会显示在我的模板上。在

所以我的问题是:如何在同一个Django类和同一个Django模板中设置多个函数?在


Tags: django函数form模板idgetifrequest
1条回答
网友
1楼 · 发布于 2024-06-02 06:29:48

你有几个误解和误解。在

在Python类中不能有两个同名的方法。第一个将在类加载时被重写。通常的解决方案是将所有代码放在一个方法中,或者使用两个不同名称的方法调用另一个方法。在

但是,您还应该考虑到,不管怎样,这些逻辑都不属于get_context_data。这是为模板准备上下文数据,而不是处理表单提交。在

根本的问题是,您选择了错误的类来继承,然后重写了错误的方法。TemplateView是一个非常基本的类,当然不应该这样使用。视图的实际操作是显示和处理创建元素的窗体;因此,应该使用CreateView。然后,您可以删除第二个方法中的几乎所有代码;视图将为您完成所有处理,您只需定义form_valid来执行自定义的保存逻辑。在

如果您愿意,搜索逻辑可以保留在get_context_data中。但是您确实需要记住调用超类方法,并且即使'recherche' in request.GET为false,也要返回context。在

相关问题 更多 >