Hi Russell,

Thanks for the responce! I actually found the problem it was not where I 
was looking for it and it was more of a typo. 
And your suggestion No.2 appears to be right:

> * Do you have any models with foreign keys to your custom user? (i.e., is 
> the problem manifesting when serialising Merchant, or serialising foreign 
> keys to Merchant?)
>

I am having a Product model with foreignkey to the Merchant model which had 
natural key method defined as follows:

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) 

The natural_key method returned self.merchant instead of self.merchant_id 
so it was trying to serialize the whole merchant object to make a natural 
key.  After switching this to merchant_id it is working properly. 

As a side note -- if you're using email as your username field, you should 
> set it as unique=True -- USERNAME_FIELD needs to be unique or you'll 
> experience problems later on. This is something that should probably be 
> caught by validation - which is a bug deserving of it's own report. For 
> performance reasons, you also probably want to set it db_index=True, since 
> you're going to be searching on that field fairly often, so having an index 
> on it makes sense.
>

Thanks for the notes I will for sure add these, but shouldn't both(unique 
and db_index) be added by default when you set your USERNAME_FIELD . 

Regards,
Kaloian 






On Wednesday, February 13, 2013 3:04:47 AM UTC+2, Russell Keith-Magee wrote:
>
>
> On Tue, Feb 12, 2013 at 9:03 PM, Kaloian <kaloian...@gmail.com<javascript:>
> > wrote:
>
>> I am having the following custom user model trying to use the 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 = ['company_name','website']
>>
>>
>>    class Meta:
>>         verbose_name = _('Merchant')
>>         verbose_name_plural = _('Merchants')
>>
>>    def __unicode__(self):
>>         return self.company_name 
>>
>>
>> The model works perfectly and database is as expected, but the problem is 
>> when I try to dumpdata to create fixtures for my tests. 
>>
>> python manage.py dumpdata --natural --exclude=contenttypes 
>> --exclude=auth.permission --indent=4 > fixtures/initial_data.json
>>
>>
>> Then I get the error:
>>
>> CommandError: Unable to serialize database: <Merchant: Test Shop> is not 
>> JSON serializable
>>
>>
>>
>> Do you have ideas what could be the reason for this. Could it be the 
>> charfield primary key or something with the abstractbaseuser model?
>>
>> It's not immediately clear. The use of natural keys could also be a 
> contributing factor here. 
>
> What you've described isn't a problem I've seen previously, so you should 
> open a ticket to track it. It would also be exceedingly helpful if you can 
> try running a few tests to remove possible causes - e.g., 
>
>  * Does serialising *without* natural keys work? 
>  * Do you have any models with foreign keys to your custom user? (i.e., is 
> the problem manifesting when serialising Merchant, or serialising foreign 
> keys to Merchant?)
>  * Do you still have problems if you use a 'normal' integer key?
>
> Essentially, any help you can provide in narrowing down the exact cause 
> would be most helpful.
>
> Also, if you can run the tests with --traceback, we can get the full error 
> logs.
>
> As a side note -- if you're using email as your username field, you should 
> set it as unique=True -- USERNAME_FIELD needs to be unique or you'll 
> experience problems later on. This is something that should probably be 
> caught by validation - which is a bug deserving of it's own report. For 
> performance reasons, you also probably want to set it db_index=True, since 
> you're going to be searching on that field fairly often, so having an index 
> on it makes sense.
>
> Yours,
> Russ Magee %-)
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to