8 Stimmen

Django: gemeinsam erforderlich?

Kennen Sie das?

unique_together = ("name", "date")

Gibt es etwas Ähnliches für Pflichtfelder?

Ich habe 2 Felder: ipv4 und ipv6. Es gibt verschiedene drahtlose Netzwerke auf der Karte, wir nennen sie "Inseln", weil sie nicht physisch, sondern über einen VPN-Tunnel verbunden sind.

Einige Inseln verwenden ipv4 und führen ipv6 ein, während andere nur ipv6 verwenden. Wenn ich ipv4 auf "erforderlich" setze, wäre es für die Inseln, die nur ipv6 verwenden, problematisch, und wenn ich ipv6 auf "erforderlich" setze, werden die Inseln, die hauptsächlich ipv4 verwenden, Probleme haben.

Es gibt 2 Möglichkeiten: beide Felder als nicht erforderlich einzustellen oder sie so zu gestalten, dass mindestens eines der beiden Felder ausgefüllt werden muss.

Die erste Lösung ist einfach, aber nicht so schön, während die zweite ist schön, aber ich weiß nicht, ob es möglich ist, ohne Hacken django.

Die Anwendung ist quelloffen.

Fuente: https://github.com/ninuxorg/nodeshot/

Demo: http://map.ninux.org

9voto

Alasdair Punkte 275312

Sie könnten eine clean Methode für Ihr Modell. Diese wird immer dann aufgerufen, wenn Sie ein Modellformular bereinigen, einschließlich des Django-Administrators.

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

Siehe die Dokumente auf Validierung von Objekten für weitere Einzelheiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X