代码之家  ›  专栏  ›  技术社区  ›  nicksheen

django。db。模型。领域。相关_描述符。通过测试django表单,RelatedObjectsDoesNotExister

  •  2
  • nicksheen  · 技术社区  · 7 年前

    我有以下型号:

    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())
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Alasdair    7 年前

    检查 region_id self.kind_id None self.region self.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')