2013-02-12 2 views
0

Я имею следующую заказную модель пользователя пытается использовать Django 1.5 AbstractBaseUser:Джанго 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

+0

Спасибо, не заметил, что, но это имеет смысл. – kalo

ответ

0

После некоторого времени потратить я нашел проблему. На самом деле это было не в Merchant модели, но в продукте, который имеет внешний ключ к Торговцу:

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) 
Смежные вопросы