我是一个完整的Django / Python noob,但试图通过现有项目破解我的方式。我有以下型号'category.py':
from django.contrib.auth.decorators import login_required, permission_required
from django.forms import ModelForm
from django.shortcuts import render, redirect
from django.template import RequestContext
from django.http import HttpResponse
from refeed.models.category import Category
from refeed.models.story import Story
import json
class CategoryForm(ModelForm):
class Meta:
model = Category
fields = ('name','category_layout')
@permission_required('refeed.change_category')
def list(request):
categories = request.user.account.category_set.all()
return render(request,'category_list.html',{'categories':categories})
@permission_required('refeed.add_category')
def create(request):
if request.method == 'POST':
form = CategoryForm(request.POST)
if form.is_valid():
category = Category(**form.cleaned_data)
category.account = request.user.account
#initialize the category with a unique order
ordered_categories = Category.objects.filter(account=request.user.account).order_by("-order")
if ordered_categories:
category.order = ordered_categories[0].order + 1
else:
category.order = 0
category.save()
return redirect('/categories')
else:
form = CategoryForm()
return render(request,'basic_form.html',{'form':form},context_instance=RequestContext(request))
@permission_required('refeed.add_category')
def create_ajax(request):
cats = request.user.account.category_set.all().values('pk', 'name')
cats = [dict(c) for c in cats]
rdata = json.loads(request.body)
category_name = rdata.get('category', '')
if not category_name:
raise Exception('No name specified')
category = Category(name=category_name)
category.account = request.user.account
#initialize the category with a unique order
ordered_categories = Category.objects.filter(account=request.user.account).order_by("-order")
if ordered_categories:
category.order = ordered_categories[0].order + 1
else:
category.order = 0
category.save()
cats = request.user.account.category_set.all().values('pk', 'name')
cats = [dict(c) for c in cats]
return HttpResponse(json.dumps({'status':'success', 'cats':cats, 'newId':category.pk}), mimetype='application/json')
@permission_required('refeed.change_category')
def edit(request,id):
category = Category.objects.get(pk=id)
if request.method == 'POST':
form = CategoryForm(request.POST,instance=category)
if form.is_valid():
form.save()
return redirect('/categories')
else:
form = CategoryForm(instance=category)
return render(request,'basic_form.html',{'form':form},context_instance=RequestContext(request))
@permission_required('refeed.delete_category')
def delete(request,id):
category = Category.objects.get(pk=id)
Story.objects.filter(category=category).update(category=None)
category.delete()
return redirect('/categories')
@login_required
def sort_categories(request):
#issue = get_object_or_404(Issue,account=request.user.account,pk=id,active=True)
for index,category_id in enumerate(request.GET.getlist('categories[]')):
category = Category.objects.filter(pk=category_id)[0]
if category:
category.order = index
category.save()
return HttpResponse('')
此模型循环使用'category_list.html'模板,如下所示:
{% extends "master.html" %}
{% block content %}
<h1>All Categories</h1>
<table class="table table-striped" id="categories_container">
<thead>
<tr>
<th>Name</th>
<th>Layout</th>
<th>Primary Color</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for category in categories %}
<tr id="categories_{{category.id}}" data-id="{{category.id}}">
<td>{{category.name}}</td>
<td>{{category.category_layout.name}}</td>
<td><div class="primary_color" style="background: {{category.primary_color}}; width:10px; height:10px; display:inline-block;"></div> {{category.primary_color}}</td>
<td>
{% if perms.refeed.change_category %}
<a href="{% url 'refeed.views.categories.edit' category.id %}"/><i class="icon-pencil"></i></a>
{%endif %}
{% if perms.refeed.delete_category %}
<a onclick="return confirm('Are you sure you would like to delete this category?');" href="{% url 'refeed.views.categories.delete' category.id %}"/><i class="icon-trash"></i></a>
{% endif %}
{% if perms.refeed.change_category %}
<i style="cursor:move;" class="icon-resize-vertical"></i></td>
{% endif %}
</td>
</tr>
{%empty%}
<tr><td colspan="2">No categories</td></tr>
{%endfor%}
</tbody>
</table>
{% if perms.refeed.add_category %}
<a href="{% url 'refeed.views.categories.create' %}" class="btn">Create new Category</a>
{% endif %}
{% endblock %}
我想做的事情似乎很简单,但我无法让它发挥作用。我想在不同的模板上使用相同的循环,基本上只是将该cateogory表添加到另一个名为'account_view.html'的模板中。任何人有任何指针?