私のウェブサイトでDjango forms
からいくつかの要素を改善しようとしています。私のcontext_processors variable
がフィルタ条件に表示されない理由を見つけるためにあなたの助けが必要です。CustomLabelModelChoiceFieldでcontext_processors変数を使用する
他のモデル(Identity
)によると2つのForeignKeysを持つモデル(BirthCertificate
)があります。
アイデンティティ:このモデルは、町の人々に関するすべての情報が含まれています(姓、FIRSTNAME、...)
出生届:このモデルでは、Identityからの新しい子供と親の情報に関するすべての情報が含まれていますモデル
私は両方のForeignKeyの選択肢フィールドを表示すると、リストが非常に長いです、私はこのForeigをフィルタリングしたいと思いますこのようなnKeys:
のみそれを行うためには、子
よりも、同じ姓を持つ人々を表示する、私はCustomLabelModelChoiceField
を使用していると私はqueryset filter
を作ってるんです。私はcontext_processors
も使用していますが、query filter
の変数を拾うのに克服しません。
マイmodels.pyファイルは次のようになります。私は、私のviews.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)
:
def cached_queries(request):
return {'VarLastname' : cache.get('VarLastname')}
:私のcontext_processors.pyファイルで
def BirthCertificate_Form(request) :
query_lastname = request.GET.get('lastname')
cache.set('VarLastname', query_lastname, 300)
print cache.get('VarLastname')
if request.method == 'POST':
....
を私のforms.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 = "test")
によって
CustomLabelModelChoiceField(Identity.objects.filter(lastname = cached_queries)
それは働きます!
ご存じですか?
EDIT:@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)
しかし、動作するようには思えません。私は、フォームのインスタンスを作成した後、フィールドのクエリセットを変更し、あなたのビューでは、なぜ^^
私は理解していれば、あなたが選択リスト '$( "id_fk_parent1")をしたい'と '$( "id_fk_parent2は")'際 '変更します$( "id_lastname") 'が変更されました。 '$(" id_lastname ")。on(" change "、function(...))によってトリガされたajax呼び出しでそれを行う必要があります。 – albar
私は明確にするために私の投稿を完全に編集します! – Deadpool
'request.POST'がありません:' Bform = BirthCertificateForm(request.POST) '!!! – Udi