Фильтрация django раскрывающегося списка чужих ключей относительно другого поля в той же модели - PullRequest
0 голосов
/ 03 мая 2020

Итак, по сути, я использую django -nested-admin для создания модели типа «викторина», в которой администратор может добавлять пользовательские вопросы и ответы на эти вопросы. Теперь проблема заключается в том, что представление администратора не может различить guish, какие ответы принадлежат к каким вопросам, поэтому каждый раз, когда пользователь выбирает вариант ответа, он может выбирать из каждого ответа для каждого когда-либо созданного вопроса. Я включил фотографию того, как это выглядит от администратора.

Я попытался переопределить форму formfield_foreign_key для администратора и смог отфильтровать показанные варианты ответов путем жесткого кодирования идентификатора вопроса. Тем не менее, я хочу иметь возможность фильтровать ответы на основе вопроса, связанного с ответом, и у меня возникают проблемы при этом. Кто-нибудь может предоставить какое-либо понимание? Заранее спасибо.

Ответы все перепутаны в представлении ответа администратора:

Ответы отфильтрованы по жестко заданному идентификатору:

Текущий код, который фильтрует по жестко заданному идентификатору вопроса:

class ResponseInline(admin.TabularInline):
   model = Response

   def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "answer":
            kwargs["queryset"] = Answer.objects.filter(question_id = 1)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

Моя текущая модель ответа в models.py:

class Response(models.Model):
    question_form = models.ForeignKey(AdditionalQuestions, on_delete=models.CASCADE, null=True)
    user = models.ForeignKey(Profile, on_delete=models.CASCADE, null = True)
    question = models.ForeignKey(Question, on_delete=models.CASCADE, null=True)
    answer = models.ForeignKey(Answer,on_delete=models.CASCADE, null=True)
    def __str__(self):
        return self.question.label
...