2010-10-17 25 views
7

Tengo modelos para, por ejemplo, como este.clave externa de django guardar

class Mp3(models.Model): 
    title=models.CharField(max_length=30) 
    artist=models.ForeignKey('Artist') 

y aquí es cómo se ve el artista como modelos:?

class Artist(models.Model): 
    name=models.CharField(max_length=100,default="Unknown") 

He creado artista con id 1. ¿Cómo puedo crear un mp3 que se asigna a este artista (yo quiero que necesitará para la consulta como esta para, por ejemplo.

mp3=Mp3.objects.get(id=50) 
mp3.artist 

) he intentado algo como esto

newMp3=Mp3(title="sth",artist=1) 

pero tiene que

ValueError: Cannot assign "1": "Mp3.artist" must be a "Artist" instance. 

entiendo el error, pero todavía no sé cómo resolver esto. Gracias por cualquier ayuda Saludos

+1

Ok Encontré en docs problema resuelto – John

+4

¿Podría publicar la respuesta aquí para la compleción de las preguntas y respuestas y las generaciones futuras? – OmerGertel

Respuesta

9
artist = Artist.objects.get(id=1) 
newMp3 = Mp3(title="sth", artist=artist) 
+0

Esta es la solución – John

2

La respuesta sería:

newMp3=Mp3(title="sth", artist=the_artist) 

donde 'the_artist' es un ejemplo real de un Artist

14

creo que conseguir al artista de la base de datos solo para agregarlo al modelo Mp3 es innecesario, si ya tiene el identificador de artista, debe hacer algo como esto:

new_mp3 = Mp3(title='Cool song', artist_id=the_artist_id) 
new_mp3.save() 

Tenga en cuenta que la _id en el parámetro artista, tiendas de Django claves externas id en un campo formado por nombre_campo más _id por lo que puede pasar el identificador de clave externa directamente a ese campo sin tener que ir a la base de datos de nuevo para obtener el objeto del artista.

Si no necesita el objeto de artista para otra cosa en su código, debe utilizar este enfoque.

Cuestiones relacionadas