After some time spend I found the problem. Actually it was not in Merchant model but in Product that has foreign key to 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)
the natural_key method in the model returned self.merchant instead of self.merchant_id so it was trying to serialize the whole merchant object to create a natural key. After switching the natural_key method to the following one the problem was fixed:
def natural_key(self):
return (self.merchant_id, self.client_product_id)