1

好的,所以我有一个这样的模型:

class Airplane(models.Model):
    tail = models.ForeignKey(Tails)
    wheel = models.CharField(max_length=500,blank=True)
    window = models.CharField(max_length=500,blank=True)

    def clean(self):
        if self.tail and self.wheel and self.window:
            raise ValidationError("Can't have all three, choose tail and one more")

现在,如果我使用 Django admin 添加新的 Airplane 记录。如果我将两个字段都留空并保存,我会得到指向该行的 Django 错误if self.tail and self.wheel

DoesNotExist at /admin/MyProject/airplane/add/

Request Method:     POST
Request URL:    http://44.101.44.172:8001/admin/MyProject/airplane/add/
Django Version:     1.2.5
Exception Type:     DoesNotExist
Exception Value:    

Exception Location:     /usr/lib/python2.7/site-packages/django/db/models/fields/related.py in __get__, line 299
Python Executable:  /usr/bin/python
Python Version:     2.7.0

Django 不应该在运行 clean 之前检查是否填写了必填字段吗?无论如何,处理这个问题的最佳方法是什么?

4

2 回答 2

0

您的 tails 字段不接受空值。您将需要添加null=True它以使其工作。

于 2011-06-27T20:56:15.730 回答
0

好的,作为一种解决方法,我最终定义了一个自定义表单,并在 admin.py 中对此模型进行了验证。

我仍然不明白为什么在 Django 确定已填写必填字段之前调用 model.clean。哦,好吧。

于 2011-06-28T13:20:49.480 回答