我正在使用Django 1.9以下内容:
views.py:
def a_new(request):
# submit button
if request.method == "POST":
form = AForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('ui:config-list')
# first visit
else:
form = AForm()
template = 'api/test_template.html'
context = RequestContext(request, {'form': form})
return render_to_response(template, context)
forms.py:
class AForm(forms.ModelForm):
b= forms.ModelMultipleChoiceField(
queryset=B.objects.all(),
widget=FilteredSelectMultiple("b", is_stacked=False)
)
class Meta:
model = A
fields = ('name', 'b', )
test_template.html
...
<form role="form" class="form-inline" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div>
{{ form.name }}
{{ form.b }}
</div>
<div class="dl-horizontal">
<button type="submit" class="btn btn-success">Save</button>
</div>
</form>
models.py:
class A(models.Model):
name = models.CharField(max_length=100)
b = models.ManyToManyField(B, null=True, blank=True, name='b')
...
问题在于,当我使用“保存”按钮时 - 仅在项目中创建名称字段。正在使用窗口小部件的b项目没有被创建新项目A保存到数据库中(如果我将b字段留空,它确实显示错误,所以我猜它也检查它。)
可能是什么问题?
答案 0 :(得分:1)
b是ManyToManyField,它保存在表A上。在另一个表中,保持A和B之间的关系。
答案 1 :(得分:1)
如果您有多对多字段,请参阅the documentation关于使用commit=False
。
请注意,您没有理由在这里使用commit = False。删除它,第二次保存,Django将直接保存您的值。
答案 2 :(得分:1)