2012-03-20 5 views
0

J'ai un site d'examen, écrit dans Django, ..modèle Django migration deux tables

Comment puis-je migrer un modèle pour obtenir des données d'examen -

J'ai une classe de produits et une classe de fournisseur, et finaly une classe d'examen avec des commentaires sur les produits et les fournisseurs:

class Product(models.Model): 
    .... 

class Vendor(models.Model): 
    .... 

class Review(models.Model): 
    slug = models.SlugField(max_length=255, unique=True) 
    vendor = models.ForeignKey(Vendor) 
    user = models.ForeignKey(User, blank=True, null=True) 
    product = models.ForeignKey(Product, blank=True, null=True) 
    images = models.ManyToManyField(ReviewImage, blank=True, null=True) 
    headline = models.CharField(max_length=100) 
    review = models.TextField(blank=True, null=True) 
    rating = models.IntegerField() 
    active = models.BooleanField(default=1) 
    created = models.DateTimeField(auto_now_add=True) 
    changed = models.DateTimeField(auto_now=True) 

Lorsque je sélectionne un produit ou un fournisseur dont j'ai besoin la cote AVG de la classe rEVUE ... Comment puis-je faire?

Répondre

2

Consultez le django docs on annotation.

Quelque chose comme cela devrait fonctionner:

from django.db.models import Avg 
qs = Vendor.objects.annotate(rating_avg=Avg('review__rating')) 

Ensuite, chaque fournisseur dans qs aura une propriété .rating_avg.

+0

Désolé, corrigé quelques erreurs. – dgel

+0

vendor_object = Vendor.objects.filter (category = catégorie, review__product__isnull = Vrai, actif = Vrai) .annotate (rating_avg = Avg ('review__rating')) COMMENT puis-je le faire avec "review__product__isnull = True" ?? S'il n'y a pas d'avis, il n'y a pas de vendeur ... que faire? – pkdkk