Я строю систему онлайн-тестирования, в настоящее время у меня есть 2 таблицы:
class Answer(models.Model):
ID = models.IntegerField(primary_key = True)
answer = models.TextField()
class Question(models.Model):
ID = models.IntegerField(primary_key = True)
.....
answer = ForeinKey(Answer)
, и у меня есть ModelAdmin
class AnswerAdmin(admin.ModelAdmin):
....
class QuestionAdmin(admin.ModelAdmin):
....
Я создаю сайт администратора для него.Я хочу, чтобы каждый раз, когда пользователи переходили к вопросу, на сайте отображался только соответствующий ответ, и пользователи могли редактировать ответ (всплывающие окна AnswerAdmin).Я попытался переопределить formfield_for_foreignkey(self, db_field, request, **kwargs)
и change_view(self, request, object_id, extra_context=None)
в QuestionAdmin
, чтобы сузить набор запросов и передать соответствующий ответ в шаблон, но это не сработало, потому что я не знаю, что вставить в Answer.objects.filter(ID = ???)
.Любая идея?Также попытался использовать форму.
Обновление: я сделал это: используя
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
def __init__(self, *args, **kwargs):
super(QuestionForm,self).__init__(*args,**kwargs)
self.fields['answer'].queryset = Answer.objects.filter(ID = self.instance.answer.ID)
, чтобы переопределить форму в QuestionAdmin и добавить контекст в шаблон:
def change_view(self, request, object_id, extra_context=None):
extra_context = extra_context or {}
extra_context['ID'] = object_id
return super(QuestionAdmin, self).change_view(request, object_id,
extra_context=extra_context)
Работает, но требует, чтобы идентификатор ответа был таким же, как ссылка на идентификатор вопроса, есть ли лучший способ?