0

私は、特定のカテゴリで最も気に入ったホワイトボードをどのように照会できるかを理解しようとしています。

現在、特定のカテゴリのすべてのホワイトボードオブジェクトをクエリしています。私の解決策の1つは、好きな人の数でボードごとにクエリを実行することでしたが、それをクエリする方法を考えることができませんでした

現時点で、特定のカテゴリのすべてのホワイトボードオブジェクトを取得できる例ですが、特定のカテゴリで最も人気のあるホワイトボードを取得するにはどうすればよいでしょうか。

誰かがカテゴリの最も好きなボードをクエリする関数を作成するのを手伝ってくれるので、後で自分のボードを作成する方法を論理的に理解できます。ありがとうございます。

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',)
4

1 に答える 1

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)

ビュー.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 %}
于 2013-03-22T08:30:01.507 に答える