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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)

Nom : Screenshot from 2022-03-30 10-47-39.png
Affichages : 429
Taille : 41,9 Ko