Django使用get_or_create()处理新的ManyToManyField项

时间:2015-04-14 08:17:19

标签: django many-to-many

我有一个带有ManyToManyField的模型,在我看来,我希望能够为生成的选择框添加新选项

如何使用get_or_create函数处理这些新项?

我想在保存之前检查表单的有效性,但它永远不会有效,因为我必须创建所有新的ManyToMany项目。

与此同时,如果表单无效,我也不想添加新商品...

所以我一直坚持这个不工作的代码:

def add_entry(request):
    if request.method == 'POST':
        form = EntryForm(data=request.POST)
        model_instance = form.save(commit=False)
        for tag in model_instance.tags.all():
            t, created = Tag.objects.get_or_create(author=request.user, title=tag.title)
            model_instance.tags.add(t)
        if form.is_valid():
            model_instance.save()
            return HttpResponseRedirect("/")
    else:
        form = EntryForm()
    return render_to_response(
        'add_entry.html',
        {'form' : form },
        context_instance=RequestContext(request))

编辑:

我的代码现在是

def add_entry(request):
    if request.method == 'POST':
        form = EntryForm(data=request.POST)
        if form.is_valid():
            model_instance = form.save(commit=False)
            model_instance.save()
            form.save_m2m()
            return HttpResponseRedirect("/")
        else:
            print form.errors
    else:
        form = EntryForm()
    return render_to_response(
            'add_entry.html',
            {'form' : form },
            context_instance=RequestContext(request)
        )

我可以保存现有标签,但我不能添加新标签......

1 个答案:

答案 0 :(得分:0)

我猜您正在使用某种JS动态添加tags。我建议你进一步创建一个API端点,在那里你可以实际保存创建的标签,这样它们就可以成为选择框的有效选项。