Erweitern Django ' s ManyToManyField mit benutzerdefinierten Feldern
Arbeite ich an einem Projekt mit mehreren ManyToManyFields, doch an diesem Punkt merke ich, dass ich will, dass die ManyToManyField zu speichern, einige zusätzliche Werte (meist automatisch gesetzt), wie ein Zeitstempel, Wann die Verbindung erstellt wurde. Ich habe versucht, und ersetzt den Verweis auf models.ManyToManyField
mit meinem custom ManyToManyField
class CustomManyToManyField(models.ManyToManyField):
date_registered = models.DateTimeField(auto_now=True)
Dann meine Modelle:
class A(models.Model):
name = models.CharField(max_length=32)
class B(models.Model):
m2m = CustomManyToManyField(A)
name = models.CharField(max_length=32)
Allerdings läuft python manage.py sql testapp
gibt die folgende SQL:
BEGIN;
CREATE TABLE "testapp_a" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(32) NOT NULL
)
;
CREATE TABLE "testapp_b_m2m" (
"id" integer NOT NULL PRIMARY KEY,
"b_id" integer NOT NULL,
"a_id" integer NOT NULL REFERENCES "testapp_a" ("id"),
UNIQUE ("b_id", "a_id")
)
;
CREATE TABLE "testapp_b" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(32) NOT NULL
)
;
Es nicht berücksichtigt, die date_registered
Bereich definierte ich in der erweiterten CustomManyToManyField
. Warum nicht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dies nicht der richtige Weg, es zu tun. Sehen Zusätzliche Felder, die auf " viele-zu-viele-Beziehungen in der Django-Dokumentation.
Neben der
CustomManyToManyField
Sie erstellt eine benutzerdefinierte Feld, nicht ein Modell, es kann also keine Felder.