Django - Выбор фильтра по иностранным ключам
Я хочу отфильтровать варианты, которые пользователь может выбрать в моем поле ForeignKey. В основном у меня есть ForeignKey для темы теста и фактической темы теста. Эти темы берутся из другой модели и связаны с темой. Теперь я хочу отфильтровать варианты, чтобы включить только те темы, которые связаны с выбранной темой. Возможно ли это, и если да, то каким образом?
models.py
class Test(models.Model):
student = models.ForeignKey(Person, on_delete=models.CASCADE, blank=True, null=True)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, blank=True, null=True)
thema = models.ForeignKey(Thema, on_delete=models.CASCADE, blank=True, null=True)
school_class = models.ForeignKey(SchoolClass, on_delete=models.CASCADE, blank=True, null=True)
grade = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(6)], blank=True, null=True)
date = models.DateField(default=datetime.date.today)
def save(self, *args, **kwargs):
if not self.school_class and self.student:
self.school_class = self.student.klasse
return super().save(*args, **kwargs)
class Thema(models.Model):
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, blank=True, null=True)
thema = models.CharField(max_length=50)
Если вы используете django forms, вы можете использовать поле выбора модели. В вашем представлении вы можете установить ваш набор запросов этого поля выбора. Zo вы можете фильтровать его.
fields['your model field'].queryset = yourmodel.objects.filter(your filter parameters)
Я думаю, что в идеале вам нужно ForeignKey.limit_choices_to
Обратитесь к документации:
Вы можете ограничить выбор, доступный на уровне модели, что будет применяться во всем приложении django, включая формы автоматически.
Я думаю, что в методе сохранения также есть проблема. Разве вам не нужно написать имя модели внутри, как
return super(<modelName>).save(*args, **kwargs)