views:

152

answers:

3

Hey,

I would like to save a modified model, but I get Programming error - that a field is specified twice.

class ProductInfo(models.Model):
    product_info_id = models.AutoField(primary_key=True)
    language_id = models.IntegerField()
    product_id = models.IntegerField()
    description = models.TextField(blank=True)
    status = models.IntegerField()
    model = models.CharField(max_length=255, blank=True)
    label = models.ForeignKey(Category_info, verbose_name = 'Category_info', db_column = 'language_id', to_field = 'node_id', null = True)

I get this error because the foreign key uses as db_column language_id. If I will delete it, my object will be saved properly.

I dont quite understand whats going on and since I have defined almost all of my models this way, I fear its totally wrong or maybe I just missunderstood it...

Any ideas?

Regards

+1  A: 

I think the problem's source is that you also have a field named language_id which also creates a db column with the name language_id! So you have a collision between label and language_id!

lazerscience
+2  A: 

I have no idea why you have defined your models like this, but I'll assume you're working with a legacy database schema or you're new to django.

The above code tries to generate two columns named language_id. Django wont let you do that, because each field needs to have control over its own database column. I'm not sure what you've trying to achieve by having two fields point to the same database column.

If you're new to django and this is a fresh database, then it looks like you're doing things wrong. Maybe the following model definition is what you're looking for:

class ProductInfo(models.Model):
    language    = models.ForeignKey(Language)
    product     = models.ForeignKey(Product)
    description = models.TextField(default="", blank=True)
    status      = models.IntegerField(choices=STATUS_CHOICES)
    model       = models.CharField(max_length=255, default="", blank=True)
    label       = models.ForeignKey(CategoryInfo, null = True)
Will Hardy
So it looks like I missunderstood the whole concept. Oh well, now I need to redo my models. Anyway, thanks a lot.
realshadow
A: 

Why do you use *_id instead of ForeingKey? and why do you create an autofield?, Django creates one like primary key, you just have to do MyModel.id and you get the value.

Have you tried?

class Info(models.Model):
   ...


class ProductInfo(models.Model):
    language= models.ForeingKey(Info,related_name='language')
    ...
    label = models.ForeignKey(Info,related_name='label' ,verbose_name = 'Category_info', null = True)
sacabuche