2016-12-20 16 views
0

私のプロジェクトについての質問があり、期待した結果を得るためにはアドバイスが必要だと思います。選択肢リストから表示要素を減らすDjango

私は非常にうまく動作する個別の処方箋を作成しましたが、今ではBirthCertificateフォームを作成したいと思います。

enter image description here

しかし、私の心に問題がID Parent1ID Parent2に位置しています。二つ目は、次のように最初の1からの値をとります。このフィールドは、行ごとにすべての値を表示しますが、私は違うしたいと思います:

  • 初のソリューションを:私はすべての行を表示しますが、単にLastnameFirstnameBirthdate
  • 第二の溶液:私は研究のバーを取得するためにさせるようにしようParent1およびParent2

問題は次のとおりです。どのようにすればいいですか?

これは私のmodels.pyファイルです:これは私のforms.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=1, 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 = models.ForeignKey(Country, related_name='Pays_Naissance', verbose_name='Pays de naissance') 
    fk_parent1 = models.ForeignKey(Identity, related_name='ID_Parent1', verbose_name='ID parent1', null=True) 
    fk_parent2 = models.ForeignKey(Identity, related_name='ID_Parent2', verbose_name='ID parent2', null=True) 

:機能、そして、

from django import forms 
from BirthCertificate.models import * 

class BirthCertificateForm(forms.ModelForm) : 

    class Meta : 
     model = BirthCertificate 
     fields = '__all__' 

views.pyファイルからはました処方箋を作成して記入してください:

def BirthCertificate_Form(request) : 
    # Fonction permettant de créer le formulaire Acte de Naissance et le remplissage 

    Bform = BirthCertificateForm(request.POST or None) 

    if Bform.is_valid() : # Vérification sur la validité des données 
     Bform.save() 
     return HttpResponseRedirect('formulaire_traite') 

    context = { 
     "Bform" : Bform, 
     } 

    return render(request, 'birthform.html', context) 

ありがとうございました!

EDIT:

私はアイデンティティアプリから私のmodels.pyファイルを追加します。

class Identity(models.Model): 

    title = models.CharField(max_length=12,choices=TITLE_CHOICES, verbose_name='Civilité') 
    lastname = models.CharField(max_length=30, verbose_name='Nom de famille') 
    firstname = models.CharField(max_length=30, verbose_name='Prénom(s)') 
    sex = models.CharField(max_length=1, choices=SEX_CHOICES, verbose_name='sexe') 
    birthday = models.DateField(verbose_name='Date de naissance') 
    birthcity = models.CharField(max_length=30, verbose_name='Ville de naissance') 
    birthcountry = models.ForeignKey(Country, related_name='Pays_naissance', verbose_name='Pays de Naissance') 
    nationality = models.CharField(max_length=30, verbose_name='Nationalité') 
    job = models.CharField(max_length=30, verbose_name='Profession') 
    adress = models.CharField(max_length=30, verbose_name='Adresse') 
    city = models.CharField(max_length=30, verbose_name='Ville') 
    zip = models.IntegerField(verbose_name='Code Postal') 
    country = models.ForeignKey(Country, related_name='Pays1', verbose_name='Pays') 
    mail = models.CharField(max_length=30, verbose_name='Email', blank=True) 
    phone = models.CharField(max_length=20, verbose_name='Téléphone', blank=True) 

    def __unicode__(self): 
     return '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s' % (self.id, self.title, self.lastname, self.firstname, self.sex, self.birthday, self.birthcity, self.birthcountry, 
                    self.nationality, self.job, self.adress, self.city, self.zip, self.country, self.mail, self.phone) 

とテンプレート:私のアイデンティティアプリケーション内

<!--DOCTYPE html --> 
<html> 

<body> 

<h1 align="center"> Formulaire d'acte de naissance </h1> 

<form method='POST' action=''> {% csrf_token %} 

<h3> Partie contenant les informations de l'enfant</h3> 
{{ Bform.as_ul}} <!-- Display child part formulary --> 
{{ value|date:"%d/%m/%Y" }} 
{{ value|time:"H:M" }} 

<br></br> 

<input type ="submit" value="Valider le formulaire" /> 

</form> 

</body> 
</html> 

が、私は表示する必要がこの表のすべての要素。しかし、私はこのモデルから私のBirthCertificate Appにいくつかの要素を表示したいだけです)

+0

アイデンティティモデルのコードを表示します。それから私はあなたを助けることができるかもしれません。 –

+0

アイデンティティモデルのコードを追加しました。私のアイデンティティアプリケーションでは、正確に1つの精度だけを表示する必要があります。すべての要素を表示する必要があります。そのため、16 '%s'を作成しました – Deadpool

+0

ソリューション1の場合、アイデアの 'unicode'メソッドを変更することができます他の場所。 – schwobaseggl

答えて

1

モデルにこのフィールドを追加

from django.utils.encoding import force_text 

class CustomLabelModelChoiceField(forms.ModelChoiceField): 

    def __init__(self, *args, **kwargs): 
     self._label_from_instance = kwargs.pop('label_func', force_text) 
     super(CustomLabelModelChoiceField, self).__init__(*args, **kwargs) 

    def label_from_instance(self, obj): 
     return self._label_from_instance(obj) 

カスタムモデルフィールドを作成します。 あなたはこのような何かを行うことができます。モデルフィールドとフォームフィールドを手動で同期させる必要があるため、不都合があります。

class BirthCertificateForm(forms.ModelForm): 
    fk_parent1 = CustomLabelModelChoiceField(Identity.objects.all(), required=False, label="ID parent1", label_func=lambda obj: '%s %s %s' % (obj.firstname, obj.lastname, obj.birthday)) 
    fk_parent2 = CustomLabelModelChoiceField(Identity.objects.all(), required=False, label="ID parent2", label_func=lambda obj: '%s %s %s' % (obj.firstname, obj.lastname, obj.birthday)) 

    class Meta : 
     model = BirthCertificate 
     fields = '__all__' 
+0

ああ私が参照してください! 'class CustomLabelModelChoiceField(ModelChoiceField): NameError:name 'ModelChoiceField'が定義されていません。私はそれを解決するために探しています – Deadpool

+0

私はコードを更新しました。 – Chikiro

+0

最初はmodels.pyに行き、もう1つはforms.pyに行きますか? – Deadpool

1

あなたのModelFormのウィジェットを更新してみてください。

+0

このソリューションでは、(期待通りに)行ごとに3つの要素しか表示せず、選択リストとして取得できますか? – Deadpool

+0

ええ、私はそう願っています。 –

+0

私はそれを試しましたが、私は変更が表示されない^^私は理由を探しています – Deadpool

関連する問題