2017-08-14 2 views
0

j'ai les suivantes models.pyJe veux savoir combien de commandes sont passées par chacun des clients

from django.db import models 

class Customer(models.Model): 
    Person_Id=models.IntegerField() 
    Person_Name=models.CharField(max_length=100) 
    Address=models.CharField(max_length=500) 
    Email=models.EmailField(null=False, default="") 

    def __str__(self): 
     return self.Person_Name 

class Items(models.Model): 
    Item_Code=models.IntegerField() 
    Item_Name=models.CharField(max_length=200) 

    def __str__(self): 
     return self.Item_Name 

class Orders(models.Model): 
    Order_Id=models.ForeignKey(Customer, on_delete=models.CASCADE) 
    Item_Name=models.ManyToManyField(Items) 
    Order_date=models.DateField() 
    Comment=models.CharField(max_length=1000, blank=True) 

    def __str__(self): 
     return str(self.Order_Id) 

admin.py est le suivant

from django.contrib import admin 
from .models import Customer, Orders, Items 

class CustomerDetails(admin.ModelAdmin): 
    list_display = ('Person_Name', 'Address', 'Email','total','count') 
    readonly_fields = ('total',) 
    search_fields = ('Person_Name', 'Email') 
    list_filter = ('Address',) 
    ordering = ('-Person_Name',) 

class OrderDetails(admin.ModelAdmin): 
    filter_horizontal = ('Item_Name',) 

admin.site.register(Customer, CustomerDetails) 
admin.site.register(Items) 
admin.site.register(Orders, OrderDetails) 

Maintenant, je veux savoir combien de commandes sont passées par chaque client. Je sais que la recherche inversée de clés étrangères serait utilisée, mais je ne reçois pas la bonne façon.

+0

Voulez-vous dire que vous voulez l'ordre compte à afficher dans l'affichage de la liste d'administration? –

+0

@DanielRoseman Oui, je veux que l'ordre compte dans l'affichage de la liste d'admin. –

Répondre

0

Vous pouvez faire

class Customer(models.Model): 
    Person_Id=models.IntegerField() 
    Person_Name=models.CharField(max_length=100) 
    Address=models.CharField(max_length=500) 
    Email=models.EmailField(null=False, default="") 

    def __str__(self): 
     return self.Person_Name 
    @property 
    def order_count(self): 
     return Orders.objects.filter(Order_Id=self).count() # or self.orders_set.all().count() 

et

class CustomerDetails(admin.ModelAdmin): 
    list_display = ('Person_Name', 'Address', 'Email', 'order_count') 
+0

Dans order_count(), d'où vient la valeur self? –

+0

a ajouté une propriété de modèle. Est-ce que ça ne marche pas? – itzMEonTV

+0

Non, ça marche mais en fait je veux connaître la logique derrière ça. –