Django Admin CharFields extern befüllen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Hallo Zusammen,

ich stehe mal wieder vor einem warscheinlich einfachen Problem und finde die Lösung im Doku Dschungel von Django nicht.

Eine externe Anwendung liefert mir einen Datensatz (ArtikelID, ArtikelNr, ArtikelDesc, EK, VK, TAX, usw)
Aber ich muss die Datensätze erweitern um Felder wie (RabattGrp1, RabattGrp2, usw...)
Kann dies aber nicht in der DB der externen Anwendung machen und auch die Anwendung selbst nicht modifizieren.

Somit würde ich das ganze gerne im Admin von Django lösen.
Und jetzt stehe ich vor dem Problem wie ich im Django-Admin Charfields mit den Werten der Externen Anwendung füllen kann und um die Felder aus meinem Model erweitern.
Wichtig ist, dass die von Extern befüllten Felder nicht im Model gespeichert werden!
Die Felder würde ich als readonly markieren.

Für Hinweise auf die richtige Stelle in der Doku bin ich wie immer sehr Dankbar ;)

Gruß
Damaskus
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Evtl. hilft dir InlineModelAdmin weiter?

Oder du erweiterst das change_form.html Template und packst deine Daten in extra_context und übergibst das in change_view(), siehe: https://code.djangoproject.com/browser/ ... ns.py#L940

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Lass dein Model vom externen erben und stell das dann im Admin da, dann kannst auch die Base felder auf readonly stellen
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

apollo13 hat geschrieben:Lass dein Model vom externen erben und stell das dann im Admin da, dann kannst auch die Base felder auf readonly stellen
Genau sowas hatte ich vor, nur ist mir noch nicht ganz klar wie das geht.
Ich hätte eben die Externe Tabelle als Model nachgestellt und bei jedem aufruf des Admin das Model geleert und neu befüllt um alle Änderungen mit zu bekommen.

Code: Alles auswählen

########################################################################
class ArticleFromGS(models.Model):
    gsId = models.IntegerField(u'Artikel ID', primary_key=True)
    gsTitle = models.CharField(u'Artikel Nr.', max_length=100)
    gsUnit = models.CharField(u'Einheit', max_length=10)
    gsPosTxt = models.CharField(u'Positiontext', max_length=1000)
    gsEprice = models.FloatField(u'EK')
    gsPrice = models.FloatField(u'VK')
    gsTax = models.FloatField(u'Steuersatz in %')
    gsCustom1 = models.CharField(u'Custom1', max_length=1000)
    gsCustom2 = models.CharField(u'Custom2', max_length=1000)
    gsCustom3 = models.CharField(u'Custom3', max_length=1000)


########################################################################
class ArticleFromGSupdate(ArticleFromGS):
    discount = models.PositiveIntegerField(u'Rabatt in %')
Oder gibts es da noch einen anderen weg?

Gruß
Damaskus
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Wie meinst du leeren? Bzw was meinst du mit Änderungen mitbekommen? Wie wird die externe Tabelle befüllt etc……
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Ähm... ja sorry... ich war schon wieder zu weit in Gedanken.

Ich Beschreibe mal die Aufgabenstellung an der ich im Moment sitze:
Ein Externes Programm liefert mir per SOAP Schnittstelle oder alternativ direkt aus der DB alle Datensätze aus dem Artikelstamm.
Da die Datensätze aus dem Externen Programm aber nur sehr rudimentär sind will ich diese erweitern um div. Felder wie z.B. den Rabatt.

Problem-Nr. 1 ist, dass die Datensätze jederzeit von dem externen Programm aktualisiert/erweitert/gelöscht usw. werden können.
Also z.B. der EK oder die Artikel Beschreibung ändern sich.

Problem-Nr. 2 ist, dass ich für jeden User individuelle Einstellungen machen muss.
Also z.B. Kunde 1 hat auf Artikel Nr. 1 einen Rabatt von 10%, Kunde 2 von 8 % und zus. auf Artikel Nr. 3 20% Rabatt, usw...

Ziel ist es jedem User eine individuelle Preisliste ausgeben / anzeigen zu können.

Im Admin von Django soll es dazu eine App geben, in der alle Artikel aus dem Datenstamm angezeigt werden (geladen aus der DB des externen Programms). Zusätzlich soll für jeden User eine individuelle Preisliste angezeigt werden in der man die einzelnen Rabatte einpflegen kann.

Lösungsansatz:
Fürs Frontend die Grundlegenden Daten (Artikel Nr., Beschreibung, usw.) direkt von der SOAP-Schnittstelle zu laden und in eine Tabelle zu stecken und zusätzlich zu jedem Artikel den Rabatt aus der Django DB lesen.
In der Django DB sollen nur die Felder ArtikelID aus dem Stammdatensatz und die zusätzlichen Felder wie Rabatt. Um Platz zu sparen sollen nur Datensätze zu denen auch Rabatte eingepflegt wurden gespeichert werden und das ganze eben User bezogen.

Problem für mich ist im Moment das Zusammenführen der beiden Datenbanken im Admin von Django und ich weiss im Moment auch nicht wirklich wo ich hinlangen muss. Im Frontend ist sowas gleich geschrieben, aber Django Admin ist für mich noch totales Neuland und das will ich mit dieser App ändern. Wenn sowas überhaupt im Admin darstellbar ist.

Gruß
Damaskus
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Warum erstellst du nicht einfach ein eigenes Model mit den zusatz Daten und beziehst dich dann auf die ArtikelNr?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Solang deine Daten und die anderen Daten in der gleichen Datenbank liegen würde ich einfach ein Model für deren Daten schreiben und deines davon erben lassen -- Wenn die Daten in unterschiedlichen Datenbanken liegen wirds wohl hässlich werden (Zumindest wirst es dann nicht mehr schaffen die im admin auf einer Seite zu bearbeiten).
Antworten