Seite 1 von 1

Django Dropdown über anderes Dropdown Aktualisieren

Verfasst: Sonntag 19. Mai 2024, 11:35
von Peter1977
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?

Re: Django Dropdown über anderes Dropdown Aktualisieren

Verfasst: Sonntag 19. Mai 2024, 13:52
von sparrow
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.

Re: Django Dropdown über anderes Dropdown Aktualisieren

Verfasst: Montag 20. Mai 2024, 10:11
von Peter1977
Danke