我正在寻找在同一个班级中使用Multiple Django functions
并在同一个模板上显示这些功能。
这两个函数都在我的Django模板中,但都没有用,我也不知道为什么。
第一个功能:
此功能可让我根据3个条件搜索我的数据库中的某个人:firstname
,lastname
和birthcity
。然后我在我的数组中显示查询结果。
第二功能:
此功能很简单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模板中设置多个函数?
答案 0 :(得分:2)
你在这里有几个误解和误解。
你不能在Python类中拥有两个具有相同名称的方法。加载类时,第一个将被覆盖。通常的解决方案是将所有代码放在一个方法中,或者使用两个不同的名称,并从另一个方法中调用一个。
但是,你也应该考虑到这个逻辑都不属于get_context_data
。这是为模板准备上下文数据,而不是为处理表单提交。
根本问题在于你选择了错误的类来继承并覆盖错误的方法。 TemplateView是一个非常基本的类,当然不应该像这样使用。视图的实际操作是显示和处理创建元素的表单;所以,你应该使用CreateView。然后你可以摆脱第二种方法中的几乎所有代码;视图将为您完成所有处理,您唯一需要做的就是定义form_valid
来执行自定义保存逻辑。
如果您愿意,搜索逻辑可以保留在get_context_data
中。但是你需要记住调用超类方法,并且即使'recherche' in request.GET
为假也返回上下文。