我的项目布局如下:
1. page
has many: categories
2. category
belongs to: page
has many: items
3. item
belongs to: category
当我进入我想要修改的页面时(向这些类别添加新类别或新项目),到目前为止我只能通过主链接添加新类别或项目这让我得到一个表格,我必须选择该项目必须属于哪个类别。我想要做的是在类别标题旁边添加一个“添加新项目”链接,当我点击它时,项目表单默认设置为该类别。我怎样才能做到这一点?我目前的形式看起来非常原始,如下:
{% extends "base.html" %}
{% block content %}
{% if page.id %}
<h1>Edit Category</h1>
{% else %}
<h1>Add Category</h1>
{% endif %}
<form action="{{ action }}" method="POST">
{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<input type="submit" id="save_page" value="Save" class="success button" /> <a href="javascript:window.history.back();">Cancel</a>
</form>
{% endblock %}
答案 0 :(得分:0)
所以,这样做的方法是将其从表单中完全排除,并在保存时将其设置在视图中。
class ItemForm(forms.ModelForm):
class Meta:
model = Item
exclude = ('category',)
和视图:
def create_item(request, category_id):
if request.method == 'POST':
form = ItemForm(request.POST)
if form.is_valid():
item = form.save(commit=False)
item.category_id = category_id
item.save()
return redirect(...)
...etc...
通过网址提供:
url(r'^create_item/(?P<category_id>\d+)/$, 'create_item', name='create_item'),
您可以从类别列表中链接到该链接:
{% for category in categories %}
<li>{{ category.name }} - <a href="{% url 'create_item' category.id }">Create item</a></li>
{% endfor %}