Django:需要在一起吗?

nem*_*ign 8 django django-models

你知道吗:

unique_together = ("name", "date")
Run Code Online (Sandbox Code Playgroud)

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

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

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

我可以做两件事:将两个字段设置为不需要或以某种方式设置它,因此必须至少填充其中一个.

第一个解决方案很简单,但不是那么好,而第二个解决方案很好,但我不知道是否有可能没有黑客django.

该应用程序是开源的.

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

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

Ala*_*air 9

你可以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")
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅有关验证对象的文档.