django-taggit icon indicating copy to clipboard operation
django-taggit copied to clipboard

Multiple TaggableManager in single model resulting in Cannot resolve keyword u'None' into field.

Open jesseward opened this issue 10 years ago • 4 comments

Note : Currently using 0.11.1 as 0.11.2 does not support multiple TaggableManager objects in the same model.

environment

$ python --version
Python 2.6.6
$ pip freeze
Django==1.6.1
django-taggit==0.11.1

models.py

from django.db import models

from taggit.managers import TaggableManager
from taggit.models import GenericTaggedItemBase, TagBase

class SecondTag(TagBase):
    pass

class SecondTaggedItem(GenericTaggedItemBase):
    tag = models.ForeignKey(SecondTag)

class MyModel(models.Model):
    first_tag = TaggableManager()
    second_tag = TaggableManager(through=SecondTaggedItem)

Create an save a new MyModel object, then attempt to iterate through second_tag.

>>> a = MyModel()
>>> a.first_tag = 'one,two'
>>> a.second_tag = 'three,four'
>>> a.save()

>>> q = MyModel.objects.get(pk=1)
>>> for f in q.second_tag.iterator(): f
... 
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/manager.py", line 181, in iterator
    return self.get_queryset().iterator(*args, **kwargs)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/taggit/managers.py", line 335, in get_query_set
    return self.through.tags_for(self.model, self.instance)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/taggit/models.py", line 153, in tags_for
    return cls.tag_model().objects.filter(**kwargs).distinct()
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/manager.py", line 163, in filter
    return self.get_queryset().filter(*args, **kwargs)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/query.py", line 590, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/query.py", line 608, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1198, in add_q
    clause = self._add_q(where_part, used_aliases)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1232, in _add_q
    current_negated=current_negated)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1100, in build_filter
    allow_explicit_fk=True)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1351, in setup_joins
    names, opts, allow_many, allow_explicit_fk)
  File "/home/jesse/code/blah/ve/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1274, in names_to_path
    "Choices are: %s" % (name, ", ".join(available)))
FieldError: Cannot resolve keyword u'None' into field. Choices are: id, mymodel, name, secondtaggeditem, slug

jesseward avatar Jan 27 '14 03:01 jesseward