1 pièce(s) jointe(s)
Django admin champ calculé
Bonjour à tous, je débute avec django et j'ai un blocquage sur une fonctionnalité que je veux implémenter. Pour mon apprentissage j'ai décidé de faire une application de gestion de stock. j'ai comme ça trois champs : quantité, prix unitaire et montant total et ce que je veux faire de renseigner automatiquement le prix total après avoir saisi la quantité et le prix unitaire.
voici mes modèles :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Approvisionnement(models.Model):
num_approvisionnement = models.CharField(max_length=50, unique=True)
date_approvisionnement = models.DateField()
date_reception = models.DateField()
agence = models.ForeignKey(Agence, on_delete=models.CASCADE)
fournisseur = models.ForeignKey(Fournisseur, on_delete=models.CASCADE)
tva = models.ForeignKey(Tva, on_delete=models.CASCADE)
status = models.CharField(max_length=50, choices=[('active', 'active'), ('inactive', 'inactive')], default='active')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.date_approvisionnement)
class LigneApprovisionnement(models.Model):
approvisionnement = models.ForeignKey(Approvisionnement, on_delete=models.CASCADE)
produit = models.ForeignKey(Produit, on_delete=models.CASCADE)
unite = models.ForeignKey(Unite, on_delete=models.CASCADE)
quantite = models.IntegerField()
prix_unitaire = models.DecimalField(max_digits=10, decimal_places=2)
prix_total = models.DecimalField(max_digits=10, decimal_places=2)
status = models.CharField(max_length=50, choices=[('active', 'active'), ('inactive', 'inactive')], default='active')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.quantite) |
Voci mon fichier admin.py:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class LigneApprovisionnementInline(admin.TabularInline):
readonly_fields = ('prix_total',)
fields = ('produit', 'unite', 'quantite', 'prix_unitaire', 'prix_total')
model = LigneApprovisionnement
extra = 1
def prix_total(self, obj):
if obj.prix_unitaire:
return obj.prix_unitaire * obj.quantite
else:
return '-'
class ApprovisionnementAdmin(admin.ModelAdmin):
inlines = [LigneApprovisionnementInline]
list_display = ('num_approvisionnement', 'date_approvisionnement', 'agence', 'status')
list_filter = ('agence', 'status')
search_fields = ('num_approvisionnement', 'date_approvisionnement', 'agence', 'status')
admin.site.register(Approvisionnement, ApprovisionnementAdmin) |
Pièce jointe 616445