Seite 1 von 1
[django] Model für Rechnungen mit einzelen Positionen...
Verfasst: Mittwoch 30. Januar 2008, 18:08
von jens
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?
Verfasst: Donnerstag 31. Januar 2008, 10:49
von jens
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???
Verfasst: Donnerstag 31. Januar 2008, 13:26
von phxx
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.
Verfasst: Donnerstag 31. Januar 2008, 13:30
von keppla
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.
Verfasst: Donnerstag 31. Januar 2008, 14:02
von jens
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.
Verfasst: Donnerstag 31. Januar 2008, 14:19
von jens
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...
Verfasst: Donnerstag 31. Januar 2008, 14:19
von phxx
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.
Verfasst: Donnerstag 31. Januar 2008, 14:26
von phxx
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