【发布时间】:2017-05-02 16:17:23
【问题描述】:
我对 Django 仍然很缺乏经验,但我被困在这个问题上。我得到了一个几乎完成的项目,父母可以填写他们孩子的评估,然后研究人员可以使用 Django 和 Postgresql 收集和存储这些数据。有几个相关模型位于两个不同的应用程序中,它们都相互关联。一个“仪器”(测试类型)可以有多个研究,而这些研究又可以有多个参与者。我做了一个画得很糟糕的图像来描述我的意思。
有一种表格,BackgroundForm,用于收集人口统计信息(年龄、出生体重等)。然后将此数据存储在模型中,BackgroundInfo 与参与者的管理 ID。我在使表单验证更灵活时遇到问题。某些工具(测试)是针对特定年龄的,我不确定如何将这些信息一直获取到 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)
【问题讨论】:
标签: python django forms validation django-forms