2009-10-22 3 views
0

Мои модели:Некоторые проблемы с подтверждением URL-адреса в Django просмотров

история:

categories = models.ManyToManyField(Category) 

Категория: название | пули

Мои URLs:

(r'^(?P<cat_slug>.*)/$', 'news.views.archive_category'), 

И в просмотров, я использую:

def archive_category(request, cat_slug): 
    entry = News.objects.get(categories__slug=cat_slug) 
    return render_to_response('news_archive_category.html', {'entry':entry, }) 

Это что-то неправильно, если у меня есть история двух или более категории. Пожалуйста, помогите мне. Большое спасибо!

ответ

0
category = Category.objects.filter(slug=cat_slug)#get the category requested 
#now get all the entries which have that category 
entries = News.objects.filter(categories__in=category)#because of the many2many use __in 

отредактирован после комментария

+0

Спасибо. Но если мы это сделаем, будет сгенерирована ошибка: объект «Категория» не является итерируемым. – anhtran

+0

мой плохой. используйте фильтр вместо get. то нет необходимости в try/except. выбор запроса можно итерабельно. –

+0

нет необходимости в try/except error-wise, но вы можете захотеть что-то сделать, если нет записей. на моем мультиблоге я просто оставлю его в покое и покажу запрошенную страницу без записей. –

0

Что вы хотите в этом случае? Вы пытаетесь показать список всех записей в категории или только один?

News.objects.get() будет всегда получить один элемент или поднять исключение, если существует несколько критериев, соответствующих критериям. Либо вы должны использовать filter() вместо этого, передавая шаблон QuerySet в шаблон, поэтому вам нужно выполнить итерацию; или, добавьте критерии к вашему urlconf, чтобы вы также получили конкретный пул ввода, так что вы получите только один объект.

+0

Используйте фильтр опции проще. – anhtran

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

  • Нет связанных вопросов^_^