各ユーザーが回答できる、個別の回答を含む一連の質問を作成しようとしています。この種の機能を実現するために、次のモデルを作成しました。
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")
これらの質問に対処するには、最初は admin-interface で十分です。「質問ごと」に表示される必要があるため、「質問」には、許可されている回答と、ユーザーが提供できる回答が表示される必要があります。
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)
IntegrityError を生成する回答を保存するまで、すべてがうまく機能します。これはオブジェクト間の依存関係に関連していると思いますか?
回避できなかった2番目の項目: real_answer の選択肢を実際のオプション (質問に関連するもの) に制限するために、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
次のように admin.py で使用します。
class AnswerInline(admin.TabularInline):
model = Answer
form = AnswerForm
これを実行すると、 self.instance.question.possible_answer.all()は常にDoesNotExist を発生させます
どんなポインタでも大歓迎です。
一番、
アンドレアス