【问题标题】:django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist by testing django formdjango.db.models.fields.related_descriptors.RelatedObjectDoesNotExist 通过测试 django 表单
【发布时间】:2018-01-22 03:22:53
【问题描述】:

我有以下型号:

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

【问题讨论】:

    标签: python django django-forms django-testing


    【解决方案1】:

    在您的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')
    

    【讨论】:

    • 好的,让测试成功运行,self.region_id is not None 是重要的部分。如果我不使用self.kind_id 部分,它也会成功运行。但是如果没有这个添加,我如何创建它也可以工作的区域?
    • 提交data = {'kind': None, 'region': self.test_region}时需要勾选self.kind_id is not None,以防出错。我不明白您的问题“我必须如何创建在没有此添加的情况下也可以工作的区域”。
    猜你喜欢
    • 2016-08-02
    • 2018-11-10
    • 2017-03-11
    • 2017-10-19
    • 2018-01-04
    • 2020-03-04
    • 2015-03-12
    • 2012-11-27
    • 2011-05-13
    相关资源
    最近更新 更多