2017-09-24 3 views
1

Je suis nouveau à Django et je suis sûr que cette question a déjà été posée si elle a été connectée.Comment définir la valeur par défaut du champ de modèle à partir d'une autre valeur de champ connue?

Je vais essayer d'expliquer exactement ce que je veux dire par un exemple. J'ai un biscuit/boîte à biscuits et dans ma boîte, j'ai des paquets de biscuits, des cercles de chocolat (10 biscuits), des gaufrettes à la vanille (15 biscuits), etc. J'ai fait un modèle pour le produit (paquets de biscuit) qui contient le nombre maximum de biscuits par paquet.

from Django.db import models 

class Product(models.Model): 
    barcode = models.CharField(max_length=200, primary_key=True) 
    quantity = models.IntegerField() 

Je veux avoir un autre modèle qui contient les paquets réels. Lorsque vous créez un pack avec current_quantity par défaut à la quantité du produit et que chaque biscuit est éliminé, il peut être diminuée jusqu'à 0.

class Pack(models.Model): 
    barcode = modes.ForeignKey(Product) 
    current_quantity = models.IntegerField() 

Alors, comment puis-je obtenir le modèle pour obtenir le current_quantity Pack pour être le même que celui produit quantité par défaut?

Si essayer de le faire dans les modèles est le mauvais endroit pour tenter cela. Je me réjouis des meilleures solutions DRY KIS.

Nous vous remercions de votre temps.

Répondre

1

Vous pouvez remplacer la méthode de pack modèle, comme celui-ci save():

class Pack(models.Model): 
    barcode = modes.ForeignKey(Product) 
    current_quantity = models.IntegerField() 

    def save(self, force_insert=False, force_update=False, using=None, 
     update_fields=None): 
     if not self.id: 
      self.current_quantity = self.barcode.quantity 
     return super(Pack, self).save() 

La ligne sinon self.id vérifie si l'objet dispose actuellement d'un identifiant qui signifie que si l'objet est nouveau. Donc self.current_quantity = self.barcode.quantity ne sera exécutée qu'à la création de l'objet