Задать вопрос
@nurzhannogerbek

Почему создается лишь одна запись?

Здравствуйте! Столкнулся со странной проблемой. Помогите пожалуйста исправить.

Вывожу список REQUIREMENTS_CHOICES c чекбоксами, так как в форме использовал MultipleChoiceField. Далее пытаюсь во view создать несколько объектов, на основе тех данных, которые были отмечены пользователем. Проблема в том, что создается лишь одна запись и используются данные лишь из последнего отмеченного пользователем чекбокса. В чем мой косяк? То есть если пользователем были отмечены предположим 3 чекбокса, необходимо создать 3 объекта используя данные из отмеченных чекбоксов.

models.py:
class Requirement(models.Model):
    code = models.UUIDField(_('Code'), primary_key=True, default=uuid.uuid4, editable=False)
    symbol = models.CharField(_('Symbol'), max_length=250)
    name = models.CharField(_('Name'), max_length=250)


forms.py:
class AddForm(forms.ModelForm):
    symbol= forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple, choices=REQUIREMENTS_CHOICES,)

    class Meta:
        model = Requirement
        fields = ('symbol',)


REQUIREMENTS_CHOICES = (
    ('A', 'Name A'),
    ('B', 'Name B'),
    ('C', 'Name C'),
)


views.py:
def requirement_add(request):
    data = dict()
    if request.method == 'POST':
        form = AddForm(request.POST)
        if form.is_valid():
            list = dict(REQUIREMENTS_CHOICES) # {'C': 'Name C', 'A': 'Name A', 'B': 'Name B'}
            symbols = form.cleaned_data.get('symbol') # ['A', 'B', 'C']
            requirement = form.save(commit=False)
            for symbol in symbols:
                requirement.symbol = symbol
                requirement.name = list[symbol]
                requirement.save()
            data['form_is_valid'] = True
            requirements = Requirement.objects.filter()
            context = {requirement': requirement, 'requirements': requirements}
            data['html_requirement'] = render_to_string('project/requirement_list.html', context)
        else:
            data['form_is_valid'] = False
    else:
        form = AddForm()
    context = {'form': form}
    data['html_requirement_form'] = render_to_string('project/requirement_add.html', context, request=request)
    return JsonResponse(data)
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@nurzhannogerbek Автор вопроса
В конце концов нашел решение. Необходимо было добавить во view requirement.pk = None.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы