django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist 通过测试 django 表单
django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist by testing django form
我有以下型号:
class Damage(models.Model):
kind = models.ForeignKey(Kind, on_delete=models.PROTECT)
region = models.ForeignKey(Region, on_delete=models.PROTECT)
def clean(self):
if self.region not in self.kind.regions.all():
raise ValidationError('not possible')
以及对应的形式:
class DamageForm(forms.ModelForm):
class Meta:
model = Damage
fields = ['kind', 'region']
当我 运行 以下测试时,我总是 django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: Damage has no region
失败。
def test_empty_input(self):
data = {
'kind': None,
'region': None,
}
form = DamageForm(data)
self.assertFalse(form.is_valid())
def test_invalid_input(self):
data = {
'kind': self.test_kind,
'region': self.test_region,
}
form = DamageForm(data)
self.assertFalse(form.is_valid())
在您的 clean
方法中尝试访问 self.region
或 self.kind
之前,检查 region_id
和 self.kind_id
不是 None
。
def clean(self):
if self.region_id is not None self.kind_id is not None and self.region not in self.kind.regions.all():
raise ValidationError('not possible')
我有以下型号:
class Damage(models.Model):
kind = models.ForeignKey(Kind, on_delete=models.PROTECT)
region = models.ForeignKey(Region, on_delete=models.PROTECT)
def clean(self):
if self.region not in self.kind.regions.all():
raise ValidationError('not possible')
以及对应的形式:
class DamageForm(forms.ModelForm):
class Meta:
model = Damage
fields = ['kind', 'region']
当我 运行 以下测试时,我总是 django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: Damage has no region
失败。
def test_empty_input(self):
data = {
'kind': None,
'region': None,
}
form = DamageForm(data)
self.assertFalse(form.is_valid())
def test_invalid_input(self):
data = {
'kind': self.test_kind,
'region': self.test_region,
}
form = DamageForm(data)
self.assertFalse(form.is_valid())
在您的 clean
方法中尝试访问 self.region
或 self.kind
之前,检查 region_id
和 self.kind_id
不是 None
。
def clean(self):
if self.region_id is not None self.kind_id is not None and self.region not in self.kind.regions.all():
raise ValidationError('not possible')