Vous n'êtes pas identifié(e).
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
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
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
je confirme, le __str__ est mille fois mieux
Merci !
Hors ligne