[django] Model für Rechnungen mit einzelen Positionen...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich versuche mich gerade in einer kleinen Rechnungsverwaltung in django... Ich weiß aber nicht, ob mein Model so super ist...

Also es sieht ja so aus: Eine Rechnung hat mehrere Positionen: Anzahl + Beschreibung + Preis

Wie das abbilden???

Mein momentanes Model sieht so aus:

Code: Alles auswählen

class RechnungsPosition(models.Model):
    konto = models.ForeignKey(Konto)
    anzahl = models.PositiveIntegerField()
    beschreibung = models.TextField()
    einzelpreis = models.FloatField()

class Rechnung(models.Model):
    rechnungnummer = models.IntegerField()
    kunde = models.ForeignKey(Kunde)
    positionen = models.ManyToManyField(RechnungsPosition)
Weiß nicht ob da eine ManyToMany wirklich Sinn macht... Andere Vorschläge?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab mal das Projekt Public gemacht:

http://sourceforge.net/projects/pyrm/
http://www.ohloh.net/projects/11389?p=PyRM
SVN: http://svn.pylucid.net/pyrm/


Noch zum Model... Ich glaube das es keine gute Idee ist, die Anzahl so wie es jetzt ist zu speichern... Auch der Preis ist vielleicht nicht am rechten Platz... Man möchte eine Rechnungsposition wohl mit einer anderen Anzahl und Preis auf die Rechnung packen...
Also noch eine Tabelle/Klasse dazwischen???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Eine andere Möglichkeit wäre, dass Du in RechnungsPosition ein ForeignKey einträgst. Das wäre dann ein OneToMany mit RechnungsPosition zu Rechnung. Das würde dann von den Relationen her gesehen mehr Sinn machen.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

phxx hat geschrieben:Das würde dann von den Relationen her gesehen mehr Sinn machen.
Da stimme ich zu, many-to-many scheint mir da falsch, da es heist

-eine Rechnung kann mehrere Positionen haben
-eine Position kann mehrere Rechnungen haben

und imho ist der zweite Punkt falsch, denn jede Position steht auf genau einer Rechnung.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, ihr habt recht... Ich brauche keine Lagerhaltung oder sowas in der Art. Ich mache i.d.R. nur Dienstleistungen und die sind Individuell. Also kommt eine Rechnungsposition zu 90% nur auf einer einzigen Rechnung vor.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wobei... Mit einem ForeignKey hab ich aber ein Problem...

Ihr meint das so, oder?

Code: Alles auswählen

class RechnungsPosition(models.Model):
    anzahl = models.PositiveIntegerField()
    beschreibung = models.TextField()
    einzelpreis = models.FloatField()
    rechnung = models.ForeignKey(Rechnung)

class Rechnung(models.Model):
    rechnungnummer = models.IntegerField()
    kunde = models.ForeignKey(Kunde)
Wie bekomme ich alle Daten zu einer Rechnung? Ich müßte dazu quasi per Hand mit die Daten zusammen sammeln, oder nicht?
Beim ManyToMany hängen alle Positionen direkt bei der Rechnung mit dran...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

phxx hat geschrieben:Das wäre dann ein OneToMany mit RechnungsPosition zu Rechnung.
OneToMany von Rechnung zu RechnungsPosition muss es ja eigentlich heißen. Hab mich vertan, aber ich glaube ihr habt ja verstanden was ich gemeint habe.
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

jens hat geschrieben:Wie bekomme ich alle Daten zu einer Rechnung? Ich müßte dazu quasi per Hand mit die Daten zusammen sammeln, oder nicht?
Beim ManyToMany hängen alle Positionen direkt bei der Rechnung mit dran...
Es funktioniert folgendes:

Code: Alles auswählen

r = Rechnung.objects.get(id=1)
r.rechnung_set.all() # gibt alle Rechnungsoptionen zu dieser Rechnung zurück
r.rechnung_set # ist ein Manager objekt

RechnungsOption(models.Model):
    ...
    rechnung = models.ForeignKey(Rechnung, related_name="posten")

# jetzt kann man in Rechnungsinstanzen so auf die Rechnungsoptionen zugreifen:
r.posten.all() # das gleiche wie vorhin r.rechung_set.all()
# man beachte das nun nur noch r.posten und nicht mehr r.rechnung_set funktioniert.
http://www.djangoproject.com/documentation/model-api/ (nach related_name suchen)
http://www.djangoproject.com/documentat ... ed-objects
Antworten