我正在尝试创建某种“面板控件”。我需要直接从ListView管理我的对象。我将向您展示我想要解决的透明(我相信)架构。
class Category(models.Model):
cat_name = models.CharField(max_length=120)
class Product(models.Model):
category = models.ForeignKey(Category)
prod_name = models.CharField(max_length=120)
class CategoryListView(ListView):
model = Category
def get_context_data(self, *args, **kwargs):
context = super(CategoryListView, self).get_context_data(*args, **kwargs)
# two class based forms created for models
context['form_category'] = CategoryForm()
context['form_product'] = ProductForm()
return context
def post(self, request, *args, **kwargs):
form_category = CategoryForm(request.POST or None)
if form_category.is_valid():
new_category = form_category.save(commit=False)
new_category.save()
return redirect('category_list')
return Http404
我使用两个模态窗口打开我添加到我的上下文视图中的表单
<button>Modal btton opens product form</button>
{% for category in object_list %}
<div class="panel">
<div class="panel-heading">
<h3>{{ category.cat_name}}</h3>
<button>Modal btn opens product form</button>
</div>
<div class="panel-body">
<ul>
{% for product in category.product_set.all %}
<li>
<p>{{ product.prod_name }}<p>
<span><a href="" class="btn btn-default">Delete</a></span>
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
<form action="." method="POST">{%csrf_token%}
{{ form_category.as_p }}
<input type="submit" value="add category">
</form>
<form action="." method="POST">{%csrf_token%}
{{ form_product.as_p }}
<input type="submit" value="add product">
</form>
对于第一种形式(CategoryForm),它工作正常,因为整页指的是(model = Category)。现在的问题是 - 如何在该页面上创建第二个对象。我可以在DetailView中使用url和参数如slug,id或pk以及将其作为值传递之后执行此操作但我想从该页面执行此操作而不移动到详细信息页面。 其次我在考虑如何从列表中删除产品,但是如果让django知道我想删除的女巫对象存在同样的问题。
感谢。