Django 1.5 AbstractBaseUser,char主键不是JSON可序列化的

时间:2013-02-12 11:18:33

标签: django json django-1.5

我有以下自定义用户模型试图使用Django 1.5 AbstractBaseUser:

class Merchant(AbstractBaseUser): 
    email = models.EmailField()
    company_name = models.CharField(max_length=256)
    website = models.URLField()
    description = models.TextField(blank=True)
    api_key = models.CharField(blank=True, max_length=256, primary_key=True)   

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['email','website']


   class Meta:
        verbose_name = _('Merchant')
        verbose_name_plural = _('Merchants')

   def __unicode__(self):
        return self.company_name 

该模型运行良好,数据库正如预期的那样,但问题是当我尝试使用dumpdata为我的测试创建灯具时。

python manage.py dumpdata --natural --exclude=contenttypes --exclude=auth.permission --indent=4 > fixtures/initial_data.json

然后我收到错误:

CommandError: Unable to serialize database: <Merchant: Test Shop> is not JSON serializable

你有想法可能是什么原因。它可能是charfield主键还是具有abstractbaseuser模型的东西?

由于

1 个答案:

答案 0 :(得分:0)

花了一些时间后我发现了问题。实际上它不是商家模型,而是产品中有商家的外键:

class Product(models.Model):
    name = models.CharField(max_length=200)
    #merchant = models.ForeignKey(Merchant, to_field='api_key')
    merchant = models.ForeignKey(Merchant)
    url = models.URLField(max_length = 2000)  
    description = models.TextField(blank=True) 
    client_product_id = models.CharField(max_length='100')

    objects = ProductManager() 
    class Meta:
        verbose_name = 'Product'
        verbose_name_plural = 'Products' 
        unique_together = ('merchant', 'client_product_id',) 

    def __unicode__(self):
        return self.name 

    def natural_key(self):
        return (self.merchant, self.client_product_id) 

模型中的natural_key方法返回self.merchant而不是self.merchant_id,因此它尝试序列化整个商家对象以创建自然键。将natural_key方法切换为以下方法后,问题得到解决:

def natural_key(self):
    return (self.merchant_id, self.client_product_id)