2010-10-17 3 views
7

Tôi có các mô hình cho ví dụ như thế này.phím nước ngoài django tiết kiệm

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

và đây là cách các mô hình Artist trông giống như:

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

Tôi đã tạo Artist với id 1. Làm thế nào tôi có thể tạo một file mp3 mà được gán cho nghệ sĩ này (Tôi muốn cần nó cho truy vấn như thế này cho ví dụ.

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

) tôi đã thử sth như thế này

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

nhưng tôi đã nhận hơn

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

Tôi hiểu lỗi nhưng vẫn không biết làm thế nào để giải quyết việc này. Nhờ sự giúp đỡ Trân trọng

+1

Ok tôi đã tìm thấy trong tài liệu được giải quyết vấn đề – John

+4

Bạn có thể đăng câu trả lời ở đây để hoàn thành câu hỏi và các thế hệ tương lai không? – OmerGertel

Trả lời

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

Đây là giải pháp – John

2

Câu trả lời sẽ là:

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

nơi 'the_artist' là một ví dụ thực tế của một Artist

14

Tôi nghĩ rằng nhận được các nghệ sĩ từ cơ sở dữ liệu chỉ cần thêm nó vào mô hình Mp3 không cần thiết, nếu bạn đã có id nghệ sĩ bạn nên làm như sau:

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

Lưu ý rằng _id trong tham số nghệ sĩ, các cửa hàng Django phím nước ngoài id trong một lĩnh vực hình thành bởi field_name cộng _id để bạn có thể vượt qua id chính nước ngoài trực tiếp đến lĩnh vực đó mà không cần phải đi đến cơ sở dữ liệu một lần nữa để có được đối tượng nghệ sĩ.

Nếu bạn không cần đối tượng nghệ sĩ cho một thứ khác trong mã của bạn, bạn nên sử dụng phương pháp này.