Я до сих пор довольно неопытный с Django, но я застрял в этой проблеме. Мне дали почти законченный проект, в котором родители могли заполнять оценки своих детей, а затем исследователи могли собирать и хранить эти данные с помощью Django и Postgresql. Существует несколько связанных моделей, расположенных в двух разных приложениях, которые все относятся друг к другу. «Инструмент» (тип теста) может иметь несколько исследований, которые, в свою очередь, могут иметь несколько участников. Я сделал плохо нарисованный образ, чтобы описать, что я имею в виду.Проверка формы Django на основе удаленной связанной модели
Существует одна форма, BackgroundForm, которая собирает демографическую информацию (возраст, вес при рождении и т. Д.). Эти данные затем сохраняются в модели BackgroundInfo с идентификатором администратора участника. У меня возникают проблемы, делающие валидацию формы более гибкой. Некоторые инструменты (тесты) предназначены для определенных возрастов, и я не уверен, как получить эту информацию вплоть до проверки BackgroundForm, так как это связано с несколькими отношениями. Есть ли способ включить проверку формы, которая проверяется в зависимости от атрибутов модели, расположенной в нескольких отношениях?
cdi_forms/forms.py
class BackgroundForm(BetterModelForm):
age = forms.IntegerField()
sex = forms.ChoiceField(choices=(('M', 'Male'), ('F', 'Female'), ('O', 'Other')), widget=forms.RadioSelect)
def clean(self):
cleaned_data = super(BackgroundForm, self).clean()
if cleaned_data.get('age') == '':
self.add_error('age', 'Please enter your child\'s DOB in the field above.')
class Meta:
model = BackgroundInfo
exclude = ['administration']
cdi_forms/models.py
class BackgroundInfo(models.Model):
administration = models.OneToOneField("researcher_UI.administration")
age = models.IntegerField(verbose_name = "Age (in months)")
sex = models.CharField(max_length = 1, choices = (('M', "Male"), ('F', "Female"), ('O', "Other")))
researcher_UI/models.py
class administration(models.Model):
study = models.ForeignKey("study")
subject_id = models.IntegerField()
class study(models.Model):
researcher = models.ForeignKey("auth.user")
name = models.CharField(max_length = 51)
instrument = models.ForeignKey("instrument")
class instrument(models.Model):
name = models.CharField(max_length = 51, primary_key=True)
language = models.CharField(max_length = 51, blank = True)
min_age = models.IntegerField(verbose_name = "Minimum age", null = True)
max_age = models.IntegerField(verbose_name = "Maximum age", null = True)