Есть модель
import datetime
from django.db import models
from django.db.models import permalink
from django.contrib.auth.models import User
from django.contrib import admin
from markdown import markdown
VIEWABLE_STATUS=[3,4]
class ViewableManager(models.Manager):
def get_query_set(self):
default_queryset=super(ViewableManager,self).get_query_set()
return default_queryset.filter(status__in=VIEWABLE_STATUS)
# Create your models here.
class Category(models.Model):
label=models.CharField(blank=True,max_length=50)
slug=models.SlugField()
class Meta:
verbose_name_plural="categories"
def __unicode__(self):
return self.label
class Story(models.Model):
STATUS_CHOICES=(
(1,"Needs Edit"),
(2,"Needs Approval"),
(3,"Published"),
(4,"Archived"),
)
title=models.CharField(max_length=100)
slug=models.SlugField()
category=models.ForeignKey(Category)
markdown_content=models.TextField()
html_content=models.TextField(editable=False)
owner=models.ForeignKey(User)
status=models.IntegerField(choices=STATUS_CHOICES,default=1)
created=models.DateTimeField(default=datetime.datetime.now)
modified=models.DateTimeField(default=datetime.datetime.now)
class Meta:
ordering=['modified']
verbose_name_plural="stories"
def save(self):
self.html_content=markdown(self.markdown_content)
self.modified=datetime.datetime.now()
super(Story,self).save()
admin_objects=models.Manager()
objects=ViewableManager()
@permalink
def get_absolute_url(self):
return ("cms-story",(),{'slug':self.slug})
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields={'slug':('label',)}
class StoryAdmin(admin.ModelAdmin):
list_display=('title','owner','status','created','modified')
search_fields=('title','content')
list_filter=('status','owner','created','modified')
prepopulated_fields={'slug':('title',)}
admin.site.register(Story,StoryAdmin)
admin.site.register(Category,CategoryAdmin)
from django.shortcuts import render_to_response, get_object_or_404
from django.db.models import Q
from cms.cmsapp.models import Story, Category
def category(request, slug):
"""Given a category slug, display all items in a category."""
category = get_object_or_404(Category, slug=slug)
story_list = Story.objects.filter(category=category)
heading = "Category: %s" % category.label
return render_to_response("cmsapp/story_list.html", locals())
def search(request):
"""
Return a list of stories that match the provided search term
in either the title or the main content.
"""
if 'q' in request.GET:
term = request.GET['q']
story_list = Story.objects.filter(Q(title__contains='first') | Q(markdown_content__contains=term))
heading = "Search results"
return render_to_response("cmsapp/story_list.html", locals())
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>{% block title %}{% endblock %}</title>
<style type="text/css" media="screen">
body { margin: 15px; font-family: Arial; }
h1, h2 { background: #aaa; padding: 1% 2%; margin: 0; }
a { text-decoration: none; color: #444; }
.small { font-size: 75%; color: #777; }
#header { font-weight: bold; background: #ccc; padding: 1% 2%; }
#story-body { background: #ccc; padding: 2%; }
#story-list { background: #ccc; padding: 1% 1% 1% 4%; }
#story-list li { margin: .5em 0; }
</style>
</head>
<body>
<div id="header">
<form action="{% url cms-search %}" method="get">
<a href="{% url cms-home %}">Home</a> •
<label for="q">Search:</label> <input type="text" name="q">
</form>
</div>
{% block content %}
{% endblock %}
</body>
</html>
{% extends "cmsapp/base.html" %}
{% block content %}
{% if heading %}
<h1>{{ heading }}</h1>
{% endif %}
<ul id="story-list">
{% for story in story_list %}
<li><a href="{{ story.get_absolute_url }}">{{ story.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}from django.conf.urls.defaults import *
from cms.cmsapp.models import Story
info_dict={'queryset':Story.objects.all(),'template_object_name':'story'}
urlpatterns = patterns('django.views.generic.list_detail',
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'^$', 'object_list', info_dict, name="cms-home"),
)
urlpatterns += patterns('cms.cmsapp.views',
url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"),
url(r'^search/$', 'search', name="cms-search"),
)
Пока что все сомнения у меня исключительно на стороне функции представления search.
Есть мысли? потому как мозги уже кипят)