2017-04-07 80 views
0

我正在創建一個UserProfile模型,用戶可以在其中爲其個人資料添加儘可能多或最少的圖像。我已經使用圖像模式,像這樣考慮:Django - 將多個圖像/數據添加到UserProfile模型的一個字段

class Image(models.Model): 
    related_profile = models.ForeignKey(UserProfile) # UserProfile is the name of the model class 
    user_picture = models.ImageField(upload_to=get_user_img, blank=True, null=True, height_field='height_field', width_field='width_field') 

當有人訪問其UserProfile然後所有的Image對象將顯示;但是,當我想編輯UserProfile(即刪除一個或兩個圖像),但無法做到這一點。 的「實例」不希望返回多個Image對象進行編輯,因爲我得到錯誤:

get() returned more than one Image -- it returned 2!

有這樣這表明過濾器(過類似的問題),而不是得到()這裏django - get() returned more than one topic 儘管這使用了ManyToMany關係,並且該解決方案對我的錯誤無效。

有沒有人知道任何好的方法來重組這個,以便我可以從同一頁面編輯每個模型對象(所以不會返回上述錯誤)?

就像標題所暗示的那樣,我想知道是否有可能將一組圖像作爲列表存儲在UserProfile模型的一個字段中,因爲這是一個潛在的想法。

回答

0

你在正確的軌道上。 Model.objects.get()方法預計查詢結果是一行(實例),然後返回。但在你的情況下,UserProfile可以有任何數量的相關圖像。所以你需要遍歷你將要從查詢中得到的(可能的)多個結果,然後對每個結果進行一些處理。更多類似:

# there is only ONE UserProfile per userid.. that is to say, userid is a 
# unique key.. so I can use get() to fetch it 

profile = UserProfile.objects.get(userid=the_userid) 

# now I need to get each image 
for image in Image.objects.filter(user_profile=profile): 
    # do something with image.... 

如果你只需要鏡像實例和不需要用戶配置的實例,那麼你就可以縮短這個聯接:

for image in Image.objects.filter(user_profile__userid=the_userid): 
    # do something with image.... 

我要補充,這有什麼好用圖像做,但適用於任何時候使用Django從數據庫中獲取數據。任何具有多行的查詢都需要以這種方式完成。

相關問題