ist hier eine vereinfachte Version eines meiner Modelle:Warum akzeptiert der Django-Administrator keine Nullable-Fremdschlüssel?
class ImportRule(models.Model):
feed = models.ForeignKey(Feed)
name = models.CharField(max_length=255)
feed_provider_category = models.ForeignKey(FeedProviderCategory, null=True)
target_subcategories = models.ManyToManyField(Subcategory)
Diese Klasse verwaltet eine Regel eine Liste von Elementen aus einem Feed in die Datenbank für den Import.
Das Admin-System lässt mich keine ImportRule hinzufügen, ohne eine feed_provider_category auszuwählen, obwohl sie im Modell als nullable deklariert ist. Die Datenbank (SQLite im Moment) prüft sogar aus ok: wird nicht zulassen,
f = Feed.objects.get(pk=1)
i = ImportRule(name='test', feed=f)
i.save()
... aber das Admin-System
:>>> .schema
...
CREATE TABLE "someapp_importrule" (
"id" integer NOT NULL PRIMARY KEY,
"feed_id" integer NOT NULL REFERENCES "someapp_feed" ("id"),
"name" varchar(255) NOT NULL,
"feed_provider_category_id" integer REFERENCES "someapp_feedprovidercategory" ("id"),
);
...
ich das Objekt in dem Python-Shell erstellen kann leicht genug ich bearbeite es natürlich. Wie kann ich den Administrator veranlassen, dass ich Objekte bearbeiten/erstellen kann, ohne diesen Fremdschlüssel anzugeben?
Das funktionierte. Ich dachte, dass null = True genug wäre, wenn es kein CharField wäre, und dass blank = True CharField-spezifisch war. Sieht so aus, als hätte ich mich geirrt. –
Das hat mich neugierig gemacht, warum Djangos Admin nicht automatisch leere Werte für null = True-Felder erlaubt, ohne explizit Leerzeichen zu setzen = True? Zu viel Magie? – jholster
'null = True' funktioniert für das Modell (Datenbank), während' blank = True' für das Formular gilt. Es gibt eine andere Auswahl für Formulare: 'editable = False' – jpaugh