Frage

Ich ahe eine Multi -Mieter -Django -Datenbank. Alle meine Multi -Mieter -fähigen Modelle importieren aus einer Klasse AccountSpecificModel, was als FK zu einer Klasse Account. Jetzt habe ich einige unique=True und unqiue_together in Meta, die nicht angeben account.

In meinem Szenario für AccountSpecificModel Die Einzigartigkeit hat keine Menaing, wenn es sich nicht darum kümmert account, was bedeutet, dass ich jeden konvertieren möchte unique zu einem unique_together mit account, und Simlar für unique_together.

Wie kann ich das machen?

War es hilfreich?

Lösung

Wenn ich Sie richtig verstehe, wollen Sie dies:

class Client(models.Model):
    account = models.ForeignKey(Account)
    email = models.EmailField()

    class Meta:
        unique_together = (('account', 'email'),)

Beachten Sie das "Zwei-Tupel", den ich Unique_together zugewiesen habe. Sie können ein Standard -Tupel durchführen, aber wenn es mehr als ein Feld gibt, das Sie gemeinsam einzigartig sein möchten, müssen Sie es trotzdem ändern.

Jetzt können 500 verschiedene Konten einen Kunden mit dem E -Mail -Beispiel@example.com haben, aber kein Konto kann 2 Clients mit derselben E -Mail haben.

Andere Tipps

Ich habe Ihre Frage nicht vollständig verstanden, aber ich habe festgestellt, dass bei der Implementierung komplizierter Django -Modellklassenanpassungen eine gute Lösung eine Klassenfabrik ist. Ich stellte fest, dass es weniger kompliziert und weniger überraschend ist als mehrere Vererbung und andere Magie.

def factory(superclass, arguments):
    class SomeClass(superclass):
        [...]

        class Meta:
            [...]

    return SomeClass

RealClass = factory(SuperClass, args)

Ich habe andere Ansätze für ein ähnliches klingendes Problem für eine Weile ausprobiert, aber eine Fabrik für die Klasse löste am Ende das Problem. Denken Sie darüber nach, es kann Ihnen helfen, Ihr Problem zu lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top