Ich möchte Felder von Django-Modellen um einige benutzerdefinierte Feldoptionen erweitern, da ich eine Anwendung erstelle, die mit Modellen verwendet wird, die nur einem allgemeinen Schema folgen. Die Idee ist, dass die App immer noch mit neu definierten Modellen arbeiten sollte und dass die gesamte Konfiguration direkt in models.py
passieren sollte. Daher möchte ich einige Optionen als Schlüsselwortargumente übergeben, z. Definieren, ob das Feld in einer externen Darstellung angezeigt werden soll. Das Problem besteht darin, dass das Übergeben neuer Schlüsselwortargumente den Fehler unerwarteter Schlüsselwortargumente verursacht. Bisher habe ich so etwas wie diese zurückgegriffen, was ich denke, ist eine Art hässlich:Django: Anfügen von benutzerdefinierten Feldoptionen zum Angeben der externen Darstellung
class CustomCharField(models.CharField):
def __init__(self, *args, **kwargs):
self.custom_option = kwargs['custom_option']
del kwargs['custom_option']
super().__init__(*args, **kwargs)
Gäbe es eine saubere Lösung?
Darüber hinaus frage ich mich, ob dieser Ansatz überhaupt richtig ist oder ob es eine andere bevorzugte Möglichkeit gibt, eine externe Repräsentation eines Modells in Django zu codieren, etwa marshmallow für Flask.
@Jamo Wirklich hängt davon ab, was Sie versuchen zu tun.Könnten Sie erklären, was Sie versuchen zu tun? – zEro
@zEro Ich baue ein System zum Speichern von experimentellen Daten. Das System sollte die Daten basierend auf ausgewählten Experimenten integrieren, d. H. Sie in einer großen Tabelle zusammenführen. Je nachdem, welche Art von Experimenten in den Versionen der App gespeichert sind, gibt es unterschiedliche "Datentypen", d. H. Unterschiedliche Modelle für die experimentellen Daten. Also muss ich sagen: "Zeige diese Spalte in der Ergebnistabelle." und "Dies ist nur ein unbedeutender Messwert, der nur der Vollständigkeit halber gespeichert wird." Hoffe, das macht es ein bisschen klarer. – Jarno
Hmm .. Ich bin immer noch nicht in der Lage, vollständig zu verstehen, aber näher zu kommen (denke ich). Die von Ihnen gespeicherte 'self.custom_option' wird verwendet, um herauszufinden, wie oder was in einer Ansicht angezeigt werden soll, oder? – zEro