2010-10-17 18 views
7

Ich habe Modelle für zB so.django Fremdschlüssel speichern

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

und hier ist, wie die Künstler Modelle wie folgt aussieht:?

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

I Künstler mit der ID erstellt haben 1. Wie ich einen mp3 erstellen können, die zu diesem Künstler zugeordnet ist (ich muss es wollen für die Suche nach, wie dies für zB.

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

) ich habe etw wie diese

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

aber ich habe als

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

ich den Fehler verstehen, aber immer noch nicht wissen, wie diese zu lösen. Vielen Dank für jede Hilfe Mit freundlichen Grüßen

+1

Ok, ich fand in Docs Problem gelöst – John

+4

Könnten Sie die Antwort hier für die Vollständigkeit der Q & A und zukünftige Generationen posten? – OmerGertel

Antwort

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

Das ist die Lösung – John

2

Die Antwort wäre:

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

wo ‚the_artist‘ ist eine tatsächliche Instanz eines Artist

14

Ich denke, dass der Künstler aus der Datenbank bekommen nur um es zu dem Mp3-Modell hinzuzufügen, ist es unnötig, wenn Sie bereits die Künstlernummer haben, sollten Sie etwas tun:

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

Beachten Sie, dass die _id in dem Künstler Parameter, Django speichert Fremdschlüssel-ID in einem Feld von field_name gebildet und _id so können Sie die Fremdschlüssel-ID direkt auf das Feld gehen, ohne auf die Datenbank gehen erneut, um das Künstlerobjekt zu erhalten.

Wenn Sie das Interpreter-Objekt für etwas anderes in Ihrem Code nicht benötigen, sollten Sie diesen Ansatz verwenden.

Verwandte Themen