альтернатива get_profile для цикла django - PullRequest
1 голос
/ 10 октября 2011

Я пытаюсь получить информацию об аватаре пользователя в расширенной модели профиля. Я обычно вызываю информацию через get_profile (). Однако в этом случае вызов находится внутри цикла for в шаблоне, и я получаю ошибки, если один из пользователей совпадает.

Как мне избежать этой ошибки?

{% 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}

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Чтобы расширить сказанное Мэттом, хотя использование get_or_create является хорошей идеей, вам определенно следует определить ссылку User модели вашего профиля с OneToOneField вместо ForeignKey.

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

Теперь, если вы забудете использовать get_or_create() или случайно попытаетесь создать дублирующий профиль для того же пользователя, база данных выдаст IntegrityError.

2 голосов
/ 12 октября 2011

Эта ошибка означает, что в базе данных есть два UserProfile объекта, соответствующих запросу, используемому get_profile, а не то, что get_profile был вызван дважды. Вам необходимо удалить один из этих объектов профиля из базы данных и убедиться, что не созданы повторные мультипликаторы. Вы должны иметь возможность использовать метод get_profile несколько раз без проблем. Возможно, у вас есть вызов get_or_create в этой функции без проверки правильных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...