2011-10-10 23 views
1

我試圖獲取基於擴展配置文件模型的用戶頭像的信息。我通常通過get_profile()調用信息。但是,在這種情況下,調用在模板中的for循環內,如果其中一個用戶相同,我會得到錯誤。for循環中的get_profile替代方法django

我該如何去避免這個錯誤?

{% for fevent in fevents %}  
        <!-- EVENT ><! --> 
       <div class="event"> 
         <div class="pic"> 
          <a href="" class="notification" title="{{ fevent.getPublishedPredictionsCount }} Predictions">{{ fevent.getPublishedPredictionsCount }}</a> 
          <img src="{% thumbnail fevent.artwork.get_absolute_url 100x98 crop,upscale %}" alt="" width="100" height="98" /> 
          <div class="overlay"> 
           <a href=""></a> 
          </div> 
         </div> 

         <h1><a href="">{{ fevent.title|trunchar:30 }}</a></h1> 

          {% autoescape off %} 
          {{ fevent.getEventPredictionScore|makestars }} 
          {% endautoescape %} 

         <ul class="details"> 
          <li class="cat"> 
           Category: <a href="">{{ fevent.catagory }}</a> 
          </li> 
          <li class="location"> 
           {{ fevent.location }} 
          </li> 
          <li class="date"> 
           {{ fevent.date_and_time }} 
          </li> 
          <li class="time"> 
           7:00pm - 8:00pm 
          </li> 


         </ul> 
         <!-- CLEAR ><! --><div class="clear"></div> 
         <div class="hype"> 
          <div class="avatar"> 
           <a href="" class="overlay" title="{{ fevent.owner.get_full_name }}"></a><img src="{% thumbnail fevent.owner.get_profile.avatar.get_absolute_url 120x120 crop,upscale %}" alt="" width="120" height="120" /> 
          </div> 
          <p>{{ fevent.description|trunchar:200 }}… <a href="">Read More</a></p> 
         </div> 

         <!-- CLEAR ><! --><div class="clear"></div> 

       </div> 

        <!-- END OF EVENT ><! --> 
{% endfor %}  

的問題是在這裏:

{% thumbnail fevent.owner.get_profile.avatar.get_absolute_url 120x120 crop,upscale %} 

錯誤消息返回:

Caught MultipleObjectsReturned while rendering: get() returned more than one UserProfile -- it returned 2! Lookup parameters were {'user__id__exact': 4L} 
+0

請添加錯誤信息。 –

+0

編輯,對此感到遺憾。 –

+1

這是[在你的個人資料中有'用戶'FK的缺點](http://stackoverflow.com/questions/3221745/django-when-extending-user-better-to-use-onetoonefielduser-or-foreignkeyuser )。 –

回答

2

該錯誤意味着有兩個UserProfile對象在數據庫中匹配的get_profile,而不是使用的查詢get_profile被調用兩次。您需要從數據庫中刪除其中一個配置文件對象,並確保沒有再次創建多個配置文件。您應該可以多次使用get_profile方法而不會出現問題。也許你在該函數中調用了get_or_create而沒有檢查正確的值。

+0

這不是get_or_create導致的問題。我必須在另一個模型中更改一些東西,刪除其中一個包含的鏈接模型信息userprofile。它並沒有從mysql數據庫中刪除項目,但是我認爲這是重複項目的來源。 –

+1

多個**配置文件**用於該用戶。 –

3

要展開什麼馬特說,同時使用get_or_create是一個好主意,你一定要與OneToOneField定義,而不是一個ForeignKey您的個人資料模型User鏈接。現在

user = models.OneToOneField(User, verbose_name=_(u'user')) 

,如果您忘記使用get_or_create(),或者一不留神試圖爲同一用戶創建配置文件的副本,該數據庫將引發IntegrityError