AttributeError: 'TaggableManager' object has no attribute 'primary_key'

1.5k Views Asked by At

When I try to make the new migration, using the –auto feature. python manage.py schemamigration blogger --auto it shows:

You cannot use --auto on an app with no migrations. Try --initial.

So I run the first migration again in my terminal python manage.py schemamigration blogger --initial. I got this error:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/South-0.8.1-py2.7.egg/south/management/commands/schemamigration.py", line 151, in handle
    for action_name, params in change_source.get_changes():
  File "/usr/local/lib/python2.7/dist-packages/South-0.8.1-py2.7.egg/south/creator/changes.py", line 460, in get_changes
    model_defs = freeze_apps([self.migrations.app_label()])
  File "/usr/local/lib/python2.7/dist-packages/South-0.8.1-py2.7.egg/south/creator/freezer.py", line 32, in freeze_apps
    frozen_models.update(model_dependencies(model))
  File "/usr/local/lib/python2.7/dist-packages/South-0.8.1-py2.7.egg/south/creator/freezer.py", line 96, in model_dependencies
    depends.update(field_dependencies(field, checked_models))
  File "/usr/local/lib/python2.7/dist-packages/South-0.8.1-py2.7.egg/south/creator/freezer.py", line 132, in field_dependencies
    value = get_attribute(field, attrname)
  File "/usr/local/lib/python2.7/dist-packages/South-0.8.1-py2.7.egg/south/utils/__init__.py", line 38, in get_attribute
    value = getattr(value, part)
AttributeError: 'TaggableManager' object has no attribute 'primary_key'

And this is models.py for the application blogger

from django.db import models
from taggit.managers import TaggableManager

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created = models.DateTimeField()
    tags = TaggableManager()

    def __unicode__(self):
        return self.title
1

There are 1 best solutions below

1
On

Taggit is known to confuse South they even mention this somewhere deep down in there documentation. Have a look at http://south.readthedocs.org/en/latest/customfields.html#field-name-patterns and see if it helps.

Basically you have to tell South to ignore taggit using something like:

from south.modelsinspector import add_ignored_fields
add_ignored_fields(["^taggit\.managers"])