I`m с помощью Django 1.9 с следующее:Джанго ModelForm с ManyToManyField привычка экономить к БД
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 пустым, поэтому я думаю, что его проверка тоже).
В чем может быть проблема?
Вы пытались проверить, что данные идут для поля «b». Попробуйте form.cleaned_data.get ('b') – Prateek
Где я могу попробовать? С точки зрения? – Rada
Какой инструмент отладки вы используете? Если вы используете ipdb, вы можете поместить эту строку «import ipdb; ipdb.set_trace()» ниже form.is_valid(). Затем вы можете попробовать это на своей консоли, где работает ваш сервер. Если у вас нет ipdb, просто установите его, это отличный инструмент для отладки. – Prateek