2013-03-22 98 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 %}