我有以下自定义用户模型试图使用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模型的东西?
由于
答案 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)