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.regionself.kind 之前,检查 region_idself.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')