在CustomLabelModelChoiceField中使用context_processors变量

2024-09-29 23:25:57 发布

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

我正在尝试改进我的网站中来自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)

但似乎行不通。我在找为什么^^^


Tags: name模型falseobjverbosemodelsrequestde
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:57

视图中,创建表单实例后,修改字段queryset:

parents = Identity.objects.filter(lastname=query_lastname)
form = BirthCertificateForm()
form.fields['fk_parent1'].queryset = parents.filter(sex="M")
form.fields['fk_parent2'].queryset = parents.filter(sex="F")

不需要使用上下文处理器或缓存。在

固定后(和一些风格):

^{pr2}$

相关问题 更多 >

    热门问题