Форум сайта python.su
Здравствуйте. Столкнулся с такой задачей есть две модели Рубрикатор и Товар.
Задача сделать возможность изменения у одного или нескольких товаров изменять поле rubricator в админке Django
models.py
from mptt.models import MPTTModel
from django.db import models
class Rubricator(MPTTModel):
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
name = models.CharField(max_length=50)
class Ware(models.Model):
name = models.CharField(max_length=150)
rubricator = models.ForeignKey(Rubricator, blank = True, null = True, verbose_name='Рубрика')
from django.views.generic.simple import direct_to_template
from django.core.context_processors import csrf
from ware.forms import WareMoveForm
class WareAdmin(admin.ModelAdmin):
actions = ('move_in_rubricator', )
def move_in_rubricator(self, request, queryset):
title = 'Move Ware to rubricator'
c = {}
c.update(csrf(request))
if request.method == 'POST':
form = WareMoveForm(request.POST)
if form.is_valid():
rubric = form.cleaned_data.get('rubricator')
queryset.update(rubricator = rubric)
else:
form = WareMoveForm()
context = {
'title': title,
'form': form,
}
return direct_to_template(request, 'ware_move.html', context)
move_in_rubricator.short_description = 'Move Wares to rubric'
from django import forms
from mptt.forms import TreeNodeChoiceField
from ware.models import *
class WareMoveForm(forms.ModelForm):
rubricator = TreeNodeChoiceField(queryset=Rubricator.tree.all(), level_indicator = u'+--')
class Meta:
model = Ware
fields = ('rubricator', )
{% extends "admin/base_site.html" %}
{% load i18n l10n %}
{% block title %}
{{ title }}
<p>{{ debug }}</p>
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="../../">Home</a> ›
<a href="../">Wares</a> ›
{% trans 'Move wares' %}
</div>
{% endblock %}
{% block content %}
<form method="post" action=".">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Move" />
{% endblock %}
Отредактировано (Май 20, 2011 07:20:20)
Офлайн
здесь есть хороший пример
http://docs.djangoproject.com/en/1.3/ref/contrib/admin/actions/#actions-that-provide-intermediate-pages
т.о. вам из move_in_rubricator нужно всю логику перенести в функцию вида, на которую делать редирект из экшна move_in_rubricator
Офлайн
спасибо, примерно так и решил проблему.
Офлайн