J'essaie d'avoir une série de questions avec des réponses individuelles, auxquelles chaque utilisateur peut répondre. Pour réaliser ce type de fonction, j'ai construit les modèles suivants:Modèles Django et Inlines Admin
models.py:
class Question(models.Model):
question = models.TextField(null=False)
class PossibleAnswer(models.Model):
question=models.ForeignKey(Question, related_name="possible_answer")
answer = models.CharField(max_length=200)
class Answer(models.Model):
question = models.ForeignKey(Question)
user = models.ForeignKey(User)
real_answer = models.ForeignKey(PossibleAnswer, related_name="real_answer")
Dans un premier temps admin-interface est assez, pour travailler avec ces questions. Il devrait être visible sur une « question par » base, d'où la « question » devrait montrer les réponses qu'il permet et les réponses des utilisateurs peut donner:
admin.py:
class AnswerInline(admin.TabularInline):
model = Answer
class PossibleAnswerInline(admin.TabularInline):
model = PossibleAnswer
class QuestionAdmin(admin.ModelAdmin):
inlines = [PossibleAnswerInline, AnswerInline]
admin.site.register(Question, QuestionAdmin)
Tout fonctionne très bien, jusqu'à ce que Je sauvegarde les réponses, ce qui produit une IntegrityError. Je crois que cela concerne les dépendances entre les objets?
deuxième point que je ne pouvais pas se déplacer avec: pour limiter les choix pour real_answer aux options réelles (qui sont liées à la question), je définis ce qui suit dans forms.py:
class AnswerForm(ModelForm):
class Meta:
model = Answer
def __init__(self, *args, **kwargs):
super(AnswerForm, self).__init__(*args, **kwargs)
choices = self.instance.question.possible_answer.all()
self.fields["real_answer"].choices = choices
et l'utiliser dans admin.py comme suit:
class AnswerInline(admin.TabularInline):
model = Answer
form = AnswerForm
quand je lance ce, self.instance.question.possible_answer.all() toujours soulève DoesNotExist
Tous les pointeurs sont très appréciés.
Best,
Andreas
bonne approche et cela fonctionne presque. Lorsque l'administrateur django affiche le formulaire, existe-t-il un moyen de limiter les options? dans les réponses déjà existantes, cela fonctionne, mais pas dans la nouvelle ligne en bas. –
Il devrait y avoir, oui, s'il vous plaît se référer à la documentation admin de Django (et éventuellement des formulaires) pour cela. –
Cela ne devrait-il pas aussi figurer dans le fichier AnswerForm? –