0

Django1.5AbstractBaseUserを使用しようとしている次のカスタムユーザーモデルがあります。

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 

モデルは完全に機能し、データベースは期待どおりですが、問題は、テスト用のフィクスチャを作成するためにデータをダンプしようとしたときです。

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モデルの何かでしょうか?

ありがとう

4

1 に答える 1

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_idではなくself.merchantを返したため、マーチャントオブジェクト全体をシリアル化して自然キーを作成しようとしました。natural_keyメソッドを次のメソッドに切り替えた後、問題が修正されました。

def natural_key(self):
    return (self.merchant_id, self.client_product_id)
于 2013-02-18T11:36:19.730 に答える