Django-fr

Forum

#1 16-06-2016 15:09:55

Lapsang
Membre
Inscription : 16-06-2016
Messages : 4

[débutant][Résolu] ModelForm et clé étrangère

Bonjour à tous. Tout d'abord, je débute en django, donc n'hésitez pas à me reprendre.

J'ai deux modeles :

class faqDomain(models.Model):
    faq_domain_lib = models.CharField(help_text="FAQ Domain lib",max_length=100,)
class faqEntries(models.Model):
    domain  = models.ForeignKey(
        'faqDomain',
        on_delete=models.CASCADE,
        null=False,
        db_index=True,
        verbose_name='test'
    )
    question = models.CharField(help_text="Question",max_length=255,)
    answer = models.TextField(help_text="Answer",)

j'ai créé deux ModelForm :

class FaqDomainForm(ModelForm):
    class Meta:
        model = faqDomain
        fields = ['faq_domain_lib']


class FaqEntryForm(ModelForm):
    class Meta:
        model = faqEntries
        fields = ['domain','question','answer']

Quand je veux gérer le formulaire de création d'une entrée de faqEntries :

def add_entry(request):
    form = FaqEntryForm()
    return render(request, 'faq/manage_entry.html', locals())

et dans mon template

<form action="{% url 'valid_add_entry' %}" method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="Submit"/>
        </form>

J'ai bien une liste déroulante pour chaque entrée de faqDomain, mais au lieu du titre, il affiche "faqDomain object". Comment puis-je modifier ça ?

Dernière modification par Lapsang (17-06-2016 08:58:48)

Hors ligne

#2 16-06-2016 17:09:49

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : [débutant][Résolu] ModelForm et clé étrangère

Bonjour,

Il s'agit d'ajouter une fonction représentant l'instance. Cela se fait en Python avec __str__ ou __unicode__.
Le tout est expliqué dans la documentation Django: https://docs.djangoproject.com/en/1.9/r … ances/#str

Hors ligne

#3 17-06-2016 08:25:10

Lapsang
Membre
Inscription : 16-06-2016
Messages : 4

Re : [débutant][Résolu] ModelForm et clé étrangère

J'ai trouvé une autre méthode hier soir :

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.faq_domain_lib

class FaqEntryForm(ModelForm):
    domain = MyModelChoiceField(queryset=models.faqDomain.objects.all())
    class Meta:
        model = faqEntries
        fields = ['domain','question','answer','order']

Je vais tester la méthode __str__ qui me semble beaucoup plus élégante.

Hors ligne

#4 17-06-2016 08:46:23

Lapsang
Membre
Inscription : 16-06-2016
Messages : 4

Re : [débutant][Résolu] ModelForm et clé étrangère

je confirme, le __str__ est mille fois mieux smile
Merci !

Hors ligne

Pied de page des forums