Ho uno schema DB che ho ereditato da qualche codice legacy. Ora intendiamo usare Django per riflettere le tabelle in modelli. Questo significa che non posso avere le tabelle generate usando i modelli django. Lo schema della tabella si presenta in questo modo: -Come ottenere l'ID della chiave primaria generato automaticamente in Modelli Django
mysql> desc student_profile;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| joining_on | datetime | YES | | NULL | |
| brothername | varchar(45) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
Ora il modello Django che ho creato per questo schema si presenta così: -
class StudentProfile(models.Model):
id=models.IntegerField(primary_key=True)
joining_on=models.DateField()
brothername=models.CharField(max_length=45)
class Meta:
db_table="student_profile"
Quando inserisco una riga in questo, in questo modo: -
StudentProfile.objects.insert(brothername="Bro")
La riga è inserita correttamente. Ma non ho un modo per estrarre il campo id. Sembra che siccome questo campo non è un AutoField
, django non copia sull'ID generato automaticamente da MySql. Cosa posso fare per ottenere il valore id
con cui è stata creata la riga? Ho controllato (https://code.djangoproject.com/ticket/8799#comment:1) e questo sembra essere di progettazione. Ma ho ancora bisogno di un modo per arrivare allo id
e farlo riflettere nel modello StudentProfile
. Cosa posso fare?
Una soluzione potrebbe essere quella di sovrascrivere il valore predefinito save()
e fornire esplicitamente lo id
nel modello save()
. Ma è nel modo giusto? Il database (è MySql) fornisce un modo per generare l'id, e devo essere in grado di usare questo fatto a mio vantaggio piuttosto che dover mantenere un contatore in esecuzione dall'applicazione. Qualche suggerimento?
Cosa succede se non si definisce il campo 'id' nel modello a tutti? – Selcuk
Se non lo faccio, Django ha creato automaticamente un campo del tipo project.app.StudentProfile.id o qualcosa del genere. Chiaramente il mio schema sottostante non ha questo nome come una colonna. In breve, voglio tutto ciò che offre 'AutoField' di Django, solo che voglio che il nome sia mio. – abhayAndPoorvisDad
Django creerà una colonna denominata 'id' di default che è la stessa della colonna precedente. 'project.app.StudentProfile.id' è il nome del campo nel tuo codice Python, non è il nome del colum del database. Sei sicuro che non funzioni in questo modo? – Selcuk