Django:需要在一起吗?

时间:2011-10-12 10:36:46

标签: django django-models

你知道吗:

unique_together = ("name", "date")

是否存在类似的必填字段?

我有两个字段:ipv4和ipv6。 地图上有不同的无线网络,我们将它们称为“孤岛”,因为它们没有连接,而是通过VPN隧道连接。

有些岛屿使用ipv4并且他们正在实施ipv6,而其他岛屿仅使用ipv6。 如果我将ipv4设置为必需,那么对于那些仅仅是ipv6而且如果我将ipv6设置为必需的那些主要是ipv4将会有麻烦。

我可以做两件事:将两个字段设置为不需要或者以某种方式设置它,这样两个字母中的至少一个必须填充。

第一个解决方案很容易,但不太好,而第二个解决方案很好但我不知道是否可以不用黑客攻击django。

该应用程序是开源的。

来源:https://github.com/ninuxorg/nodeshot/

演示:http://map.ninux.org

1 个答案:

答案 0 :(得分:8)

您可以为模型编写clean方法。每当您清理模型表单(包括django admin。

)时,都会调用此方法
from django.core.exceptions import ValidationError

class MyModel(model.Model):
    <field definitions>

    def clean(self):
        """
        Require at least one of ipv4 or ipv6 to be set
        """
        if not (self.ipv4 or self.ipv6):
            raise ValidationError("An ipv4 or ipv6 address is required")

有关详细信息,请参阅Validating objects上的文档。