2013-02-12 57 views
0

我有以下的自定義用戶模型試圖使用Django的1.5 AbstractBaseUser:的Django 1.5 AbstractBaseUser與焦炭主鍵不JSON序列化

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

作爲一個側面說明,官方文件說,你REQUIRED_FIELDS不應該包含您的USERNAME_FIELD – Ponytech 2013-02-12 11:22:33

+0

感謝,並沒有注意到,但它是有道理的。 – kalo 2013-02-12 11:33:13

回答

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)