'Unknown column 'ModelName.id' in 'field list'"
I am using Django with mysql. I have created models.py using command inspectdb from existing database in mysql. It has a model as below :
class Participationdata(models.Model):
userid = models.ForeignKey('Volunteer', models.DO_NOTHING, db_column='UserId') # Field name made lowercase.
eventid = models.ForeignKey('Events', models.DO_NOTHING, db_column='EventId') # Field name made lowercase.
ptrflag = models.IntegerField(db_column='PtrFlag', blank=True, null=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'ParticipationData'
unique_together = (('userid', 'eventid'),)
I have inserted the data into database using this model successfully. But while selecting data it is showing the error like :
django.db.utils.OperationalError: (1054, "Unknown column 'Participationdata.id' in 'field list'")
How should I resolve this ?
Solution 1:[1]
Do you have id field in Participationdate table?
Solution 2:[2]
Usually you would set primary_key = True on your eventid field, so Django uses it as a default id. Look at the answer in Custom id field in Django model
But it is a ForeignKeyField, so you have to add id column to your database and model. You can remove managed = False (default is True) and then:
- Create migrations for the model and
migrate --fake-initial(since you have table already, see more: https://docs.djangoproject.com/en/1.10/ref/django-admin/#cmdoption-migrate-fake-initial ) - Add
AutoField idto your model - Run
makemigrationsandmigrateas usual.
That way django uses your already-existing table, but you can modify it via models.
Solution 3:[3]
I solve this error when I add primary_key=True to my id, because Django need a primary key. In my code, I add the primary key in my View id, because the inspectdb don't get the key from the database view
class ViewRespuestaEncuestas(models.Model):
id_encuesta = models.IntegerField(primary_key=True)
encuesta = models.CharField(max_length=45, db_collation='utf8_general_ci')
id_usuario = models.IntegerField()
nombre_usuario = models.CharField(
max_length=40, db_collation='utf8_general_ci', blank=True, null=True)
id_pregunta = models.IntegerField()
pregunta = models.TextField(db_collation='utf8_general_ci')
id_respuesta = models.IntegerField()
respuesta = models.CharField(max_length=60, db_collation='utf8_general_ci')
valor = models.IntegerField(blank=True, null=True)
class Meta:
managed = False # Created from a view. Don't remove.
db_table = 'view_respuesta_encuestas'
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Szymon P. |
| Solution 2 | Community |
| Solution 3 | Miguel Angel Polo CastaƱeda |
