Ich bin immer noch ziemlich unerfahren mit Django, aber ich stecke auf diesem einen Problem fest. Ich bekam ein fast abgeschlossenes Projekt, in dem Eltern ihre Kinder bewerten konnten und dann konnten Forscher diese Daten mit Django und Postgresql sammeln und speichern. Es gibt mehrere verwandte Modelle in zwei verschiedenen Apps, die alle miteinander in Beziehung stehen. Ein "Instrument" (Art des Tests) kann mehrere Studien haben, die wiederum mehrere Teilnehmer haben können. Ich habe ein schlecht gezeichnetes Bild gemacht, um zu beschreiben, was ich meine.Django-Formular-Validierung basierend auf Entferntem verwandtem Modell
Es gibt ein Formular, BackgroundForm, das demographische Informationen (Alter, Geburtsgewicht usw.) sammelt. Diese Daten werden dann im Modell hinterlegt, BackgroundInfo mit der Administrations-ID des Teilnehmers. Ich habe Probleme, die Formularvalidierung flexibler zu machen. Bestimmte Instrumente (Tests) sind für bestimmte Altersstufen und ich bin mir nicht sicher, wie ich diese Informationen bis zur BackgroundForm-Validierung erhalten kann, da sich hier mehrere Beziehungen befinden. Gibt es eine Möglichkeit, die Formularvalidierung zu aktivieren, die in Abhängigkeit von den Attributen eines Modells validiert wird, das mehrere Beziehungen entfernt ist?
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)