Форум сайта python.su
Здравствуйте! У меня такая проблема. Нужно отобразить страницу с информацией об объекте, с возможностью редактирования одного из полей (имя объекта) и возможностью удаления объекта. Пытаюсь сделать все это через представления-классы, но не получается. Как легче и как правильно сделать такую страницу?
Офлайн
А что именно не получается? man UpdateView, DeleteView. И какой-нибудь код приведите.
Офлайн
Приложение позволяет создавать и редактировать дерево категорий. Объект один - категория, с двумя параметрами: название и ссылка на родителя. Всего две страницы: первая отображает дерево целиком, где каждая категория - ссылка на вторую, индивидуальную, страницу категории. На индивидуальной странице отображается путь от корня дерева до этой категории и дается возможность изменить имя или удалть категорию.
Вот представления. В category_detail вызывается форма редактирования категории с одним полем name, и берется категория и ее предки (чтобы построить путь от корня дерева до категории):
class CategoryDelete(DeleteView): model = Category success_url = reverse_lazy('categories:index') class CategoryUpdate(UpdateView): model = Category fields = ['name'] template_name_suffix = '_update_form' def category_detail(request, pk): category = get_object_or_404(Category, pk=pk) form = UpdateCategoryForm(initial={'name': category.name}) return render(request, template_name='categories/detail.html', context={ 'category': category, 'ancestors': category.get_ancestors(), 'form': form, })
<div> {% for ancestor in ancestors %} <a href="{% url 'categories:detail' ancestor.id %}"> {{ ancestor.name }} </a> > {% endfor %} {{ category.name }} </div> <br/> <br/> <form action="{% url 'categories:update' category.id %}" method="post"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="Сохранить" /> </form> <form action="{% url 'categories:delete' category.id %}" method="post"> {% csrf_token %} <input type="submit" value="Удалить" /> </form>
class UpdateCategoryForm(forms.Form): name = forms.CharField(label='Имя категории', max_length=50)
app_name = 'categories' urlpatterns = [ url(r'^$', views.show_index, name='index'), url(r'^(?P<pk>[\d]+)/$', views.category_detail, name='detail'), url(r'^(?P<pk>[\d]+)/update$', views.CategoryUpdate.as_view(), name='update'), url(r'^(?P<pk>[\d]+)/delete$', views.CategoryDelete.as_view(), name='delete'), ]
Отредактировано Trit (Сен. 9, 2017 11:14:22)
Офлайн