尝试注释查询集时,我从 django 方法中收到 TypeError。我在 Ubuntu 上使用 Django 1.11.12 和 MySQL 5.7.22。
这是我的models.py:
class Group(models.Model):
name = models.CharField(max_length=100)
class ActivationRecord(models.Model):
group = models.ForeignKey('directory.Group')
year = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)
如果一个组有给定年份的记录,则该组是“活跃的”。我正在尝试使用以下查询注释组是否处于活动状态:
Group.objects.annotate(active=Case(
When(activationrecord__year=2018, then=True), default=False, output_field=BooleanField))
Run Code Online (Sandbox Code Playgroud)
当我运行时,我收到以下错误:
File "/home/vagrant/Envs/think/lib/python3.5/site-packages/django/db/models/query.py", line 226, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/home/vagrant/Envs/think/lib/python3.5/site-packages/django/db/models/query.py", line 250, in __iter__
self._fetch_all()
File "/home/vagrant/Envs/think/lib/python3.5/site-packages/django/db/models/query.py", line 1118, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/home/vagrant/Envs/think/lib/python3.5/site-packages/django/db/models/query.py", line 53, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
File "/home/vagrant/Envs/think/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 877, in execute_sql
sql, params = self.as_sql()
File "/home/vagrant/Envs/think/lib/python3.5/site-packages/django/db/models/sql/compiler.py", …Run Code Online (Sandbox Code Playgroud) 我目前使用的是 Django 版本 1.11.2,并且想在管理页面之外使用 FilteredSelectMultiple 小部件。
这是我的 forms.py:
class TBDAuthGroupManageForm(forms.Form):
permissions = forms.ModelMultipleChoiceField(queryset=Permission.objects.all(),
required=True,
widget=FilteredSelectMultiple("Permissions", is_stacked=False))
class Media:
css = {'all': ('/static/admin/css/widgets.css',), }
js = ('/admin/jsi18n/',)
def __init__(self, parents=None, *args, **kwargs):
super(TBDAuthGroupManageForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这是我的观点.py:
class TBDAuthGroupManageView(DetailView):
model = TBDAuthGroup
template_name = 'perms/tbdauthgroup_manage.html'
def get_context_data(self, **kwargs):
context = super(TBDAuthGroupManageView, self).get_context_data(**kwargs)
context['form'] = TBDAuthGroupManageForm()
return context
Run Code Online (Sandbox Code Playgroud)
这是我的模板:
{% extends "base.html" %}
{% load static %}
{% block css %}
{{ form.media }}
<script type="text/javascript" src="{% static 'js/jquery-3.1.1.min.js' %}"></script>
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script> …Run Code Online (Sandbox Code Playgroud)