2013-10-28 2 views
-2
thread_list = thread.objects.select_related().filter(thread_forum_id = current_obj.id).order_by('-thread_date') 
      for thread in thread_list: 
       count = post.objects.select_related().filter(post_thread_id = thread.id).count() 
       thread.post = count 

Как это сделать?Django добавить новый товар в dict

thread.post = count 

^

class thread(models.Model): 
    mess = models.CharField(max_length=5000) 
    objects = thread_manager() 

Я хочу, чтобы добавить новый элемент в список Мануалы.

+0

Ваш вопрос непонятен. Если вы хотите установить новую переменную для каждого объекта 'thread' в вашем наборе запросов, то ваш подход будет правильным. Если вы хотите добавить новый объект в существующий запрос 'thread_list', тогда это невозможно. – FallenAngel

ответ

0

Ваш вопрос не очень хорошо написано, но я считаю, что вы ищете annotation (docs here):

from django.db.models import Count 
thread_list = thread.objects.select_related().filter(thread_forum_id=current_obj.id) \ 
    .order_by('-thread_date').annotate(post_count=Count('post_thread_set')) 
# I'm just guessing this name: 'post_thread_set' 

Возвращаемое значение не список dicts, а это queryset, который является итерируемым объектами. Вы можете получить доступ post_count как атрибут:

thread_list[0].post_count 
0

Вы способ хорош. Но есть конфликт:

thread_list = thread.objects.select_related().filter(thread_forum_id = current_obj.id).order_by('-thread_date') 
      for thread in thread_list: 
       count = post.objects.select_related().filter(post_thread_id = thread.id).count() 
       thread.post = count 

Ваш класс имеет имя нить и ваша петля имеет имя типа класса. для нити в thread_list:

Просто сделать это:

for threads in thread_list: 
        count = post.objects.select_related().filter(post_thread_id = threads.id).count() 
        threads.post = count 

или что-то вроде этого. Просто измените цикл - я добавлю 's' в конце слова

Смежные вопросы