2016-05-17 10 views
0

は私が外に残っている二つのモデルdjangoでの左外部結合の使い方は?

class Business(models.Model): 
    BID = models.IntegerField(primary_key=True, default=datetime.now().strftime("%d%y%H%S%m%M%f")) 
    BusinessName = models.CharField(max_length=150) 
    ContactPerson = models.CharField(max_length=50) 

class BusinessComment(models.Model): 
    BID = models.ForeignKey(Business, blank=True, null=True) 
    Rating = models.IntegerField(blank=True, null=True) 
    Comment = models.TextField(blank=True, null=True) 

class BusinessHours(models.Model): 
    BID = models.ForeignKey(Business, blank=True, null=True) 
    Day = models.IntegerField(blank=True, null=True) 
    StartHour = models.CharField(max_length=8, blank=True, null=True) 
    EndHour = models.CharField(max_length=8, blank=True, null=True) 

私は両方models.thisコンセプトから値以下の単一のオブジェクトでアクセスしたいを持って参加するが、私は以下のようにすべての値を持つ単一のオブジェクトで達成することができます。

BID,BusinessName,ContactPerson,AVG(Rating),Count(Number of Comment) (Condition is Business.BID = BusinessComment.BID) 

ビジネステーブルデータ

BID BusinessName ContactPerson 
1 First   First 
2 Second   Second 

BusinessHours表データ

id BID Rating Comment 
1  1 3  Comment1 
2  1 5  Comment2 
3  2 4  Comment3 
4  2 5  Comment4 

その後のようなオブジェクトであるべき結果:私は何度も試してみましたが、私は」

BID Businame ContactPerson Rating Comment 
1 First  First  4  2 
2 Second  Second  4.5  2 

それはできません.P

EDIT:

today = datetime.datetime.today().weekday() + 1 

BusinessHours表データ

id BID Day Stathours EndHour   
145 1 1 12:00am 12:00am 
146 1 2 Closed Closed 
147 1 3 12:00am 12:00am 
148 1 4 Closed Closed 
149 1 5 12:00am 12:00am 
150 1 6 12:00am 12:00am 
151 1 7 12:00am 12:00am 
152 2 1 12:00am 12:00am 
153 2 2 12:00am 12:00am 
154 2 3 12:00am 12:00am 
155 2 4 12:00am 12:00am 
156 2 5 12:00am 12:00am 
157 2 6 12:00am 12:00am 
158 2 7 12:00am 12:00am 

今、私はその出力は以下のようになりますannotate.Soでfilter(BusinessHours.Day = today)を使用してBusinessHoursからのデータをフィルタリングします。

BID Businame ContactPerson Rating Comment StartHour EndHours 
    1 First  First  4  2 12:00am 12:00pm 
    2 Second  Second  4.5  2 12:00am 12:00pm 

StartHourとEndHourはCurrent Dayの値です。

あなたが annotation with aggregationを使用することができます

答えて

0

from django.db.models import Count, Avg 

qs = Business.objcts.annotate(comment_count=Count('businesscomment'), 
           avg_rating=Avg('businesscomment__rating')) 

そして、その後、クエリセットにあなたがcomment_countavg_ratingにアクセスすることができます。

# I am using these fields in values_list for example 
qs.values_list('BID', 'BusinessName', 'ContactPerson', 'comment_count', 'avg_rating') 
+0

私は注釈でフィルタを使用することができます.Howあなたが私に一つのことを教えてもらえます私はまた、BusinessHours.id = 1 – Amit

+0

評価を取得したいということです。 'BusinessHours'は別のモデルですか? – AKS

+0

各事業は7日のレコードを持っており、1,2日目などの日の行を意味するので、そのオブジェクトの特定の日のStartHourとEndHourにアクセスしたい – Amit

関連する問題