我正在尝试改进我的网站中来自Django forms
的一些元素,我需要你的帮助,以找出为什么我的context_processors variable
没有出现在我的过滤条件中。在
根据另一个模型(BirthCertificate
),我有一个带有两个外键的模型(Identity
)。在
身份:此模型包含城镇居民的所有信息(姓氏、姓氏等)
出生证明:此模型包含所有有关新子女的信息和来自身份模型的父母信息
当我显示两个ForeignKey选项字段时,列表很长,我想像这样过滤这些ForeignKey:
只显示与孩子同名的人
为了做到这一点,我使用了CustomLabelModelChoiceField
,并制作了queryset filter
。我也在使用context_processors
,但是我没有克服在query filter
中提取变量的问题。在
我的模型.py文件看起来像:
class BirthCertificate(models.Model):
lastname = models.CharField(max_length=30, null=False, verbose_name='Nom de famille')
firstname = models.CharField(max_length=30, null=False, verbose_name='Prénom(s)')
sex = models.CharField(max_length=8, choices=SEX_CHOICES, verbose_name='Sexe')
birthday = models.DateField(null=False, verbose_name='Date de naissance')
birthhour = models.TimeField(null=True, verbose_name='Heure de naissance')
birthcity = models.CharField(max_length=30, null=False, verbose_name='Ville de naissance')
birthcountry = CountryField(blank_label='Sélectionner un pays', verbose_name='Pays de naissance')
fk_parent1 = models.ForeignKey(Identity, related_name='ID_Parent1', verbose_name='ID parent1', null=False)
fk_parent2 = models.ForeignKey(Identity, related_name='ID_Parent2', verbose_name='ID parent2', null=False)
created = models.DateTimeField(auto_now_add=True)
在我的视图.py文件,我有:
^{pr2}$在我的背景下_py.py处理器文件:
def cached_queries(request):
return {'VarLastname' : cache.get('VarLastname')}
还有我的表单.py文件看起来像:
class BirthCertificateForm(forms.ModelForm):
fk_parent1 = CustomLabelModelChoiceField(Identity.objects.filter(lastname = cached_queries), required=False, label = "Père", label_func=lambda obj: '%s %s %s %s' % (obj.lastname, obj.firstname, obj.birthday, obj.birthcity))
fk_parent2 = CustomLabelModelChoiceField(Identity.objects.filter(sex = "Feminin"), required=False, label = "Mère", label_func=lambda obj: '%s %s %s %s' % (obj.lastname, obj.firstname, obj.birthday, obj.birthcity))
但是,查询过滤器不适用于我的VarLastname
。我得到一张空名单。在
如果我替换:
CustomLabelModelChoiceField(Identity.objects.filter(lastname = cached_queries)
通过CustomLabelModelChoiceField(Identity.objects.filter(lastname = "test")
它起作用了!在
你知道吗?在
编辑:
根据@Udi的回答,我的观点如下:
def BirthCertificate_Form(request) :
# Fonction permettant de créer le formulaire Acte de Naissance et le remplissage
query_lastname = request.GET.get('lastname')
if request.method == 'POST':
parents = Identity.objects.filter(lastname=query_lastname)
Bform = BirthCertificateForm(request.POST)
Bform.fields['fk_parent1'].queryset = parents.filter(sex="Masculin")
Bform.fields['fk_parent2'].queryset = parents.filter(sex="Feminin")
if Bform.is_valid() : # Vérification sur la validité des données
if '_save2' in request.POST :
post = Bform.save()
return HttpResponseRedirect(reverse('BC_treated', kwargs={'id': post.id}))
else:
Bform = BirthCertificateForm()
context = {
"Bform" : Bform,
"query_lastname" : query_lastname,
}
return render(request, 'BC_form.html', context)
但似乎行不通。我在找为什么^^^
在视图中,创建表单实例后,修改字段queryset:
不需要使用上下文处理器或缓存。在
固定后(和一些风格):
^{pr2}$相关问题 更多 >
编程相关推荐