2013-03-22 100 views
0

我一直在試圖找出我怎麼能查詢:l,最喜歡的白板特定類別Django的查詢最喜歡

目前,我正在被查詢所有特定類別的白板對象。 我的一個解決方案是由董事會通過的喜歡,但我只是不能想辦法計數查詢來查詢其

此刻一個例子,我可以檢索爲特定類別的白板對象,現在我怎麼能找到一個特定類別最喜歡的白板。

有人可以幫助我創建將查詢類的最喜歡板功能,所以我可以在邏輯上明白我怎麼可以在以後創建自己的。謝謝

class WhiteBoard(models.Model): 
    ENGLISH = 'ENGLISH' 
    MATH = 'MATH' 
    SCIENCE = 'SCIENCE' 
    BIOLOGY = 'BIOLOGY' 
    CATEGORY = (
     (ENGLISH , 'English'), 
     (MATH, 'Math'), 
     (SCIENCE, 'Science'), 
     (BIOLOGY, 'Biology'), 
    ) 
    Category =models.CharField(max_length=30,choices=CATEGORY) 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100) 
    picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True) 
    def __unicode__(self): 
     return self.name 

class LikeBoard(models.Model): 
    user = models.ForeignKey(User) 
    Whiteboard = models.ForeignKey(WhiteBoard) 
    created = models.DateTimeField(auto_now_add=True) 

我views.py

def WhiteBoardFinder(request): 
    form = WhiteBoardFinderForm(request.POST) 
    fo = WhiteBoardFinderForm() 
    if form.is_valid(): 
     Category = form.cleaned_data['Category'] 
     Whiteboard = WhiteBoard.objects.filter(Category=Category) 
     return render(request,"boardfinder.html",{"board":board,"fo":fo}) 
    return render(request,"boardfinder.html",{"fo":fo}) 

boardfinder.html

<form method="POST" enctype="multipart/form-data"> 
    {% csrf_token %} 
    {{ fo.as_p }} 
    <input type = "submit" value= "Find Board" /> 
</form> 



{% if board %} 
<ul> 
    {% for b in board %}   
    <li><a href ="{% url world:Boat b.id %}">{{ b.name }}</li> 
    {% if b.picture %} 
    <br><img src="{{ b.picture.image.url }}"> 
    {% endif %} 
    {% endfor %} 
</ul> 
{% endif %} 

我forms.py

class BoardFinderForm(forms.ModelForm): 
    class Meta: 
     model = WhiteBoard 
     fields = ('Category',) 
+0

donkeyboy是你嗎? – 2013-03-22 06:43:28

回答

0

models.py

class WhiteBoard(models.Model): 
    ENGLISH = 'ENGLISH' 
    MATH = 'MATH' 
    SCIENCE = 'SCIENCE' 
    BIOLOGY = 'BIOLOGY' 
    CATEGORY = (
     (ENGLISH , 'English'), 
     (MATH, 'Math'), 
     (SCIENCE, 'Science'), 
     (BIOLOGY, 'Biology'), 
    ) 
    Category =models.CharField(max_length=30,choices=CATEGORY) 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100) 
    picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True) 
    def __unicode__(self): 
     return self.name 

    @property  
    def count_likes(self): 
     return LikeBoard.objects.filter(whiteboard=self).count() 

class LikeBoard(models.Model): 
    user = models.ForeignKey(User) 
    whiteboard = models.ForeignKey(WhiteBoard) //modified because of conflict 
    created = models.DateTimeField(auto_now_add=True) 

views.py

def WhiteBoardFinder(request): 
    form = WhiteBoardFinderForm(request.POST) 
    fo = WhiteBoardFinderForm() 
    if form.is_valid(): 
     Category = form.cleaned_data['Category'] 
     whiteboard = WhiteBoard.objects.filter(Category=Category) 

     categories = WhiteBoard.objects.values_list('Category', flat=True).distinct() 
     whites = sorted(whiteboard, key=lambda x: x.count_likes, reverse=True) 

     return render(request,"boardfinder.html",{ 
      "board":board,"fo":fo, "categories": categories, "whites": whites}) 
    return render(request,"boardfinder.html",{"fo":fo}) 

模板

{% for category in categories %} 
    {{ category }}<br/> 
    {% for white in whites %} 
     {% if white.Category == category %} 
     {{ white }} - {{ white.count_likes }}, 
     {% endif %} 
    {% endfor %}<br/> 
{% endfor %}