DeserializationError:'NoneType'对象使用Django loaddata没有属性'_meta'

时间:2014-01-05 11:33:59

标签: python mysql django json

我正在尝试将我的Django应用程序数据库从SQLite迁移到MySQl。

我正在使用manage.py dumpdata --natural > hunt.json

转储数据

然后在更新设置以连接到MySQL数据库后,当loaddata使用manage.py loaddata hunt时,它会引发以下错误

Problem installing fixture 'hunt.json': Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\management\commands\loaddata.p
y", line 190, in handle
    for obj in objects:
  File "C:\Python27\lib\site-packages\django\core\serializers\json.py", line 47,
 in Deserializer
    raise DeserializationError(e)
DeserializationError: 'NoneType' object has no attribute '_meta'

以下是我的model.py

from django.db import models

class DJManager(models.Manager):
    def get_by_natural_key(self, name):
        return self.get(name=name)

class DJ(models.Model):
    objects = DJManager()

    name = models.CharField(max_length=50, unique=True)
    rank = models.IntegerField()
    img = models.ImageField(upload_to='/img/', height_field=None, width_field=None)
    soundcloud_profile = models.CharField(max_length=100, blank=True, null=True)

    def natural_key(self):
    return (self.name,)

    #for human readable representation of objects
    def __unicode__(self):
        return self.name

class Song(models.Model):
    song_id = models.IntegerField()
    name = models.CharField(max_length=100)
    title = models.CharField(max_length=100)
    normalized_name = models.CharField(max_length=100)
    artist = models.ForeignKey(DJ, default=None, blank=True, null=True)
    artists = models.CharField(max_length=100)
    remixers = models.CharField(max_length=100, default=None, blank=True, null=True)
    release_date = models.DateField()
    slug = models.CharField(max_length=100)
    artwork = models.CharField(max_length=100)
    genres = models.CharField(max_length=50)
    duplicate = models.BooleanField(default=False)
    votes = models.IntegerField(default=0)

    #for human readable representation of objects
    def __unicode__(self):
        return self.normalized_name

2 个答案:

答案 0 :(得分:0)

您需要在DJ模型中定义natural_key()方法

def natural_key(self):
    return self.name

您可以在Django文档中查看它:https://docs.djangoproject.com/en/dev/topics/serialization/#dependencies-during-serialization

答案 1 :(得分:-1)

南方与测试相冲突。我应该根据docsSOUTH_TESTS_MIGRATE = False设置settings.py

  

如果这是假的,South的测试运行器集成将进行测试   数据库是使用syncdb创建的,而不是通过迁移(   默认值)。

另外,我把所有东西都扔进了夹具里。显然,这是用南方进行固定的一种不好的方式 - 因为它还将南移民表转移到固定装置中。所以我必须创建我的夹具以特定于应用程序 manage.py dumpdata hunt --natural > hunt.json