Django Dropdown über anderes Dropdown Aktualisieren

Django, Flask, Bottle, WSGI, CGI…
Antworten
Peter1977
User
Beiträge: 90
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

models.py

Code: Alles auswählen

class Lager(models.Model):
    lager     = models.CharField(max_length=100,unique=True)

    def publish(self):
        self.save()

    def __str__(self):
        return self.lager
    
class Lagerort(models.Model):
    lager     = models.ForeignKey(Lager,on_delete=models.CASCADE)
    lagerort  = models.CharField(max_length=100)
    def publish(self):
        self.save()

    def __str__(self):
        return self.lagerort

class Lagerplatz(models.Model):
    lagerort     = models.ForeignKey(Lagerort,on_delete=models.CASCADE)
    lagerplatz   = models.CharField(max_length=100)
    def publish(self):
        self.save()

    def __str__(self):
        return self.lagerplatz
        
class Lagerstand(models.Model):
    lagerplatz      =models.ForeignKey(Lagerplatz,models.OneToOneField)
    artikel         =models.ForeignKey(Artikel,models.OneToOneField)
    stand           =models.IntegerField()

    def publish(self):
        self.save()

    def __str__(self):
        return self.lagerplatz
  
Lager und Lagerort sind noch kein Problem.
Bei Lagerplatz sollte vorher das Lager ausgewählt werden und danach der Lagerort Aktualisiert werden.
die genaue Suche ist eher mein Problem.
wie macht man es jetzt am Besten?
Benutzeravatar
sparrow
User
Beiträge: 4526
Registriert: Freitag 17. April 2009, 10:28

Bitte richte nicht irgendwelche Zeilen im Code anhand von irgendwelchen Gleichheitszeichen mitten in der Zeile aus. Namen ändern sich gerne mal oder es kommen welche hinzu. Dann darfst du ewig viele Zeilen im Code ändern.

Warum gibt es eine eine .publish() Methode, die nichts weiter macht als .save() aufzurufen? Die ist dann überflüssig.

Es ist eher unüblich ein ForeignKey-Field in den Parametern als OneToeOneField zu definieren. Besser: Direkt ein OneToOneField nehmen. Dann sieht der geneigte Leser sofort, dass es sich um eine 1:1 Beziehung handelt.

Die Felder "lager", "lagerort" und "lagerplatz" sollten besser "name" oder "Bezeichnung" lauten.
Spätestens wenn man die Modelle korrekt aufbaut und "related_name" verwendet um die Relationen zu verwenden, wird sonst schnell klar, dass die Namenswahl so wie sie ist, wenig Vorteile hat.

Das Design der Modelle gefällt mir nicht.
Offensichtlich soll "Lagerstand" ein "LagerBEstand" sein und jeder Artikel hat nur einen Lagerplatz und daraus resultierend nur einen Bestand. In diesem Fall sehe ich nicht, warum man da unnötig eine weitere Tabelle führen soll. Lagerplatz und Bestand könnten also direkt in Artikel stehen.

Und zu deiner Frage:
Wenn du "related_name" korrekt bei den ForeignKeys setzt, kannst du darüber entsprechend abfragen.
Peter1977
User
Beiträge: 90
Registriert: Mittwoch 4. September 2013, 14:59

Danke
Antworten