Django ListView 动态上下文数据
Django ListView dynamic context data
鉴于我的模型:
class Deck(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
class Flashcard(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
deck = models.ForeignKey(Deck, on_delete=models.CASCADE)
question = models.TextField()
answer = models.TextField()
在我的 html 模板中,我想要一个 table 所有用户的牌组,每个牌组都有他们的牌数,例如像这样:
Deck1: 15
甲板 2:22
甲板 3:100
在我看来我有:
def get_context_data(self,**kwargs):
context=super(generic.ListView,self).get_context_data(**kwargs)
context['number_decks']=Deck.objects.filter(owner=self.request.user).count
context['number_cards']=Flashcard.objects.filter(owner=self.request.user,deck__name="Deck1").count
number_decks 按预期工作。
number_cards 在我手动输入名称时也有效。
但是如果不指定名称,我怎么能做到这一点,所以在 html 模板中我只能说:
{% for deck in deck_list %}
<td>{{deck.name}}</td>
<td>{{number_cards}}</td>
{% endfor %}
而且因为我不知道用户将创建的牌组的名称。
我试过 deck__id=deck.id,但我得到零。
如何更改我的模型或视图以获得我想要的?
你可以把它写成你的 Deck-Model 的函数:
class Deck(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
def count_flashcards(self):
fc = Flashcard.objects.filter(deck=self).count()
return fc
在您的模板中:
{% for deck in deck_list %}
<td>{{deck.name}}</td>
<td>{{deck.count_flashcards}}</td>
{% endfor %}
您可能还想在这里使用缓存属性装饰器
鉴于我的模型:
class Deck(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
class Flashcard(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
deck = models.ForeignKey(Deck, on_delete=models.CASCADE)
question = models.TextField()
answer = models.TextField()
在我的 html 模板中,我想要一个 table 所有用户的牌组,每个牌组都有他们的牌数,例如像这样:
Deck1: 15
甲板 2:22
甲板 3:100
在我看来我有:
def get_context_data(self,**kwargs):
context=super(generic.ListView,self).get_context_data(**kwargs)
context['number_decks']=Deck.objects.filter(owner=self.request.user).count
context['number_cards']=Flashcard.objects.filter(owner=self.request.user,deck__name="Deck1").count
number_decks 按预期工作。 number_cards 在我手动输入名称时也有效。 但是如果不指定名称,我怎么能做到这一点,所以在 html 模板中我只能说:
{% for deck in deck_list %}
<td>{{deck.name}}</td>
<td>{{number_cards}}</td>
{% endfor %}
而且因为我不知道用户将创建的牌组的名称。
我试过 deck__id=deck.id,但我得到零。
如何更改我的模型或视图以获得我想要的?
你可以把它写成你的 Deck-Model 的函数:
class Deck(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
def count_flashcards(self):
fc = Flashcard.objects.filter(deck=self).count()
return fc
在您的模板中:
{% for deck in deck_list %}
<td>{{deck.name}}</td>
<td>{{deck.count_flashcards}}</td>
{% endfor %}
您可能还想在这里使用缓存属性装饰器