Django foreign-key cannot assign must be a instance

8,937 views
Skip to first unread message

Sainath Bavugi

unread,
Jul 17, 2018, 12:29:49 PM7/17/18
to Django users
I am developing a web app using Django. I have created the table in MySQL database and then generated the models.py using inspectdb. I am able to fetch details and connect to the database without any issues. But while saving the values to the particular table, below error is shown

Cannot assign "3": "List.id" must be a "Order" instance.

command used
sav_list = List(id=4, item_name ='name1', item_desc='desc1', location='location', reason='rfp',  pid=3)
My models
class List(models.Model):
    id = models.IntegerField(db_column='ID', primary_key=True)  # Field name made lowercase.
    item_name = models.CharField(db_column='Item_Name', max_length=255)  # Field name made lowercase.
    item_desc = models.CharField(db_column='Item_Desc', max_length=300)  # Field name made lowercase.
    location = models.CharField(db_column='Location', max_length=100, blank=True, null=True)  # Field name made lowercase.
    reason = models.CharField(db_column='Reason', max_length=100, blank=True, null=True)  # Field name made lowercase.
    pid = models.ForeignKey('Order', models.DO_NOTHING, db_column='PID')  # Field name made lowercase.

class Order(models.Model):
    poid = models.IntegerField(db_column='POID', primary_key=True)  # Field name made lowercase.
    po = models.CharField(db_column='PO', unique=True, max_length=20)  # Field name made lowercase.
    quote = models.CharField(db_column='Quote', unique=True, max_length=20)  # Field name made lowercase.
   condition = models.CharField(db_column='Condition', max_length=15)  # Field name made lowercase. 


I have tried relate_name for foreign key but still same behaviour. Same values can be stored on database without any issues. Only Django throws an error.

Please someone help me!!!

Gerald Brown

unread,
Jul 17, 2018, 12:44:08 PM7/17/18
to django...@googlegroups.com

The way I do it is backwards from what you are doing.  I.E. I make the models first and then use ./manage.py makemigrations & ./manage.py migrate.  This way Django creates the tables AND the FK Indexes, which I think may be missing on your setup.  Now that you have the models try running the above commands.

Hope this helps.

--
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...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3dce2148-ee12-41c5-996f-f21c7b33b4a5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Glen D souza

unread,
Jul 17, 2018, 12:48:01 PM7/17/18
to django...@googlegroups.com
I would suggest you to try this code

sav_list = List(id=4, item_name ='name1', item_desc='desc1', location='location', reason='rfp',  pid=Order.objects.get(poid = 3))
Instead of passing integer 3 to pid, try to the pass the order Object which has the poid = 3 

--
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+unsubscribe@googlegroups.com.

Sainath Bavugi

unread,
Jul 17, 2018, 10:28:08 PM7/17/18
to Django users
Thanks a lot. that worked.... 

Gerald Brown

unread,
Jul 18, 2018, 9:52:00 AM7/18/18
to django...@googlegroups.com

Also when creating my models I use "id = models.AutoField(primary_key=True)" for my ID field.  This way Django will Auto generate an ID for each record.


On Tuesday, 17 July, 2018 08:03 PM, Sainath Bavugi wrote:
--
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...@googlegroups.com.

Matthew Pava

unread,
Jul 18, 2018, 1:14:00 PM7/18/18
to django...@googlegroups.com

> Also when creating my models I use "id = models.AutoField(primary_key=True)" for my ID field.  This way Django will Auto generate an ID for each record.

Reply all
Reply to author
Forward
0 new messages