python - django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist 通过测试 django 形式

标签 python django django-forms django-testing

我有以下模型:

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())

最佳答案

在尝试访问 self.regionself.kind 在你的 clean 方法中。

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')

关于python - django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist 通过测试 django 形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45671954/

相关文章:

python - 如何重定向 Django 模板并使用 'Next' 变量?

python - Django:如何使用单选按钮将附加数据链接到选择?

python - (OpenCV) 将日期放在文件名中

python - 无法安装 Orange : "error: command ' clang' failed with exit status 1"

python - 将后台任务抓取的图像保存到 ImageField

django - 无法测试 Django 1.7 应用程序

django - 在 Django 中建模产品订单

Django 将列表传递给表单以创建 Choices

python - 排序python字典

python - 使用 BottlePy/GAE 进行浏览器缓存