首页 > 解决方案 > How to query Django LogEntry by content_type name?

问题描述

I would like to query Django admin's LogEntry records by content_type.name. I have tried this:

from django.contrib.admin.models import LogEntry
logs = LogEntry.objects.filter(content_type__name='foo')

But this results in the error trace of:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/opt/sf/sf/env/lib/python2.7/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/opt/sf/sf/env/lib/python2.7/site-packages/django/db/models/query.py", line 781, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/opt/sf/sf/env/lib/python2.7/site-packages/django/db/models/query.py", line 799, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/opt/sf/sf/env/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1260, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/opt/sf/sf/env/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1286, in _add_q
    allow_joins=allow_joins, split_subq=split_subq,
  File "/opt/sf/sf/env/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1211, in build_filter
    raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0]))
FieldError: Related Field got invalid lookup: name

I can do this ...

logs = LogEntry.objects.filter(content_type=102)
logs.all()[0].content_type.name
u'foo'

... so how can I get all the content_type objects that have the name foo?

标签: django

解决方案


ContentType 由 id(integer)、app_label(char) 和 model(char) 三列组成

在这种情况下,您可能想要

LogEntry.objects.filter(content_type__model='foo')

推荐阅读