/ / Djangoクエリ最も気に入ったもの-django

最も好きなDjangoクエリ-django

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

現時点では、私はすべての特定のカテゴリのホワイトボードオブジェクト。 私の解決策の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="/images/{{ b.picture.image.url }}">
{% endif %}
{% endfor %}
</ul>
{% endif %}

私のforms.py

class BoardFinderForm(forms.ModelForm):
class Meta:
model = WhiteBoard
fields = ("Category",)

回答:

回答№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)

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 %}