我希望在同一个类中使用Multiple Django functions
,并在同一个模板上显示这些函数。在
这两个函数都在我的Django模板中,但都不起作用,我不知道为什么。在
第一个功能:
这个函数允许根据3个条件在我的数据库中搜索一个人:firstname
,lastname
和{
第二个功能:
这个函数是一个简单的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模板中设置多个函数?在
你有几个误解和误解。在
在Python类中不能有两个同名的方法。第一个将在类加载时被重写。通常的解决方案是将所有代码放在一个方法中,或者使用两个不同名称的方法调用另一个方法。在
但是,您还应该考虑到,不管怎样,这些逻辑都不属于
get_context_data
。这是为模板准备上下文数据,而不是处理表单提交。在根本的问题是,您选择了错误的类来继承,然后重写了错误的方法。TemplateView是一个非常基本的类,当然不应该这样使用。视图的实际操作是显示和处理创建元素的窗体;因此,应该使用CreateView。然后,您可以删除第二个方法中的几乎所有代码;视图将为您完成所有处理,您只需定义
form_valid
来执行自定义的保存逻辑。在如果您愿意,搜索逻辑可以保留在
get_context_data
中。但是您确实需要记住调用超类方法,并且即使'recherche' in request.GET
为false,也要返回context。在相关问题 更多 >
编程相关推荐