Tom*_*sen 4 django django-models django-queryset
我试着编写一个查询来从列表中过滤/排除某些对象,但是我收到了一个错误.
我的模特:
class Benefit(TimeStampedModel):
DEAL = 'D'
NODEAL = 'N'
TYPE_CHOICES = (
(NODEAL, 'Does not need any signed deal'),
(DEAL, 'Needs a signed deal'),
)
name = models.CharField(max_length=200)
benefit_type = models.CharField(max_length=1, choices=TYPE_CHOICES, default=DEAL)
class Profile(models.Model):
user = models.OneToOneField(User)
benefits = models.ManyToManyField(Benefit, verbose_name="Used benefits", blank=True, null=True, related_name="used_benefit")
Run Code Online (Sandbox Code Playgroud)
我的看法:
class ProfilePage(TemplateView):
template_name = "profile/frontpage.html"
def get_context_data(self, **kwargs):
context = super(ProfileFrontpage, self).get_context_data(**kwargs)
context['unused_benefits'] = Benefit.objects.filter(used_benefit__isnull=True).exclude(benefit_type=='N')
context['nodeal_benefits'] = Benefit.objects.filter(benefit_type=='N')
return context
Run Code Online (Sandbox Code Playgroud)
但它没有用.我收到此错误:global name 'benefit_type' is not defined
我不确定为什么会收到这个错误?我不认为我需要制作模型字段的变量?
在筛选查询中,您不需要==进行比较.
将您的视图代码更新为
context['unused_benefits'] = Benefit.objects.filter(used_benefit__isnull=True).exclude((benefit_type = 'N')
context['nodeal_benefits'] = Benefit.objects.filter(benefit_type = 'N')
# ---------------------------------------------------------------^ single =
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |