2010-10-17 2 views
7

У меня есть модели, например, такие как.django foreign key save

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

и вот как художник модель выглядит следующим образом:?

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

Я создал художник с идентификатором 1. Как я могу создать mp3, назначенный этот художник (я хочу это нужно для запроса, как это, например, для.

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

) Я пытался что-н, как этот

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

, но я получил, чем

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

Я понимаю ошибку, но до сих пор не знаю, как решить эту проблему. Спасибо за любую помощь С наилучшими пожеланиями

+1

Хорошо, что я нашел проблему с документами. – John

+4

Не могли бы вы разместить ответ здесь для полноты Q & A и будущих поколений? – OmerGertel

ответ

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

Это решение – John

2

Ответом будет:

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

где «the_artist» является фактическим экземпляром Artist

14

Я думаю, что получение художника из базы данных просто добавьте его в модель Mp3, но это необязательно, если у вас уже есть . Художник id вы должны сделать что-то вроде этого:

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

Обратите внимание, что _id в параметре художника, Django хранит внешние ключи идентификатор в поле формируется field_name плюс _id так что вы можете передать внешний ключ идентификатор непосредственно в этой области без необходимости обращаться к базе данных снова, чтобы получить объект художника.

Если вам не нужен объект-художник для чего-то еще в коде, вы должны использовать этот подход.