0

我的项目布局如下:

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 %}
4

1 回答 1

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 提供:

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 %}
于 2013-10-16T10:29:40.247 回答