Beispiel #1
0
    def __init__(self, request=None, instance=None):
        field = instance  # alias
        post = None if not request else request.POST

        self.form = FieldForm(post, instance=field)
        self.optionsFormset = None

        # Создание формсета, если необходимо
        if not field or (field and field.fieldType == 'list'):
            # Используем form=<наш базовый класс формы>!
            OptionsFormset = inlineformset_factory(Field,
                                                   FieldOption,
                                                   form=ModelForm)
            #
            # Передаём instance=form.instance, а не field.  В качестве field мог
            # быть передан None; в этом случае пустой instance создаётся внутри
            # конструктора формы.
            #
            # При выполнении сохранения формсет пунктов списка будет обращаться к
            # заданному instance за идентификатором динамического поля.  В случае,
            # когда на странице добавляется новое динамическое поле (а не редактируется
            # существующее), особо важно, чтобы instance, на который ссылаются форма
            # и формсет, был одним объектом, чтобы формсет узнал идентификатор
            # вновь добавленной записи.
            #
            self.optionsFormset = OptionsFormset(post,
                                                 instance=self.form.instance)
Beispiel #2
0
    def post(self, request):
        user = request.user
        form = FieldForm(request.POST)

        if form.is_valid():
            cd = form.cleaned_data
            field = form.save(commit=False)
            field.user = user
            field.save()

            return redirect('/fields/')

        messages.add_message(request, messages.INFO,
                             'Поле с таким именем уже существует!')

        return render(request, 'fields/field_add.html', {'form': FieldForm()})
Beispiel #3
0
class FieldFormAndFormset(object):
    def __init__(self, request=None, instance=None):
        field = instance  # alias
        post = None if not request else request.POST

        self.form = FieldForm(post, instance=field)
        self.optionsFormset = None

        # Создание формсета, если необходимо
        if not field or (field and field.fieldType == 'list'):
            # Используем form=<наш базовый класс формы>!
            OptionsFormset = inlineformset_factory(Field,
                                                   FieldOption,
                                                   form=ModelForm)
            #
            # Передаём instance=form.instance, а не field.  В качестве field мог
            # быть передан None; в этом случае пустой instance создаётся внутри
            # конструктора формы.
            #
            # При выполнении сохранения формсет пунктов списка будет обращаться к
            # заданному instance за идентификатором динамического поля.  В случае,
            # когда на странице добавляется новое динамическое поле (а не редактируется
            # существующее), особо важно, чтобы instance, на который ссылаются форма
            # и формсет, был одним объектом, чтобы формсет узнал идентификатор
            # вновь добавленной записи.
            #
            self.optionsFormset = OptionsFormset(post,
                                                 instance=self.form.instance)

    def is_valid(self):
        return self.form.is_valid() and (not self.optionsFormset
                                         or self.optionsFormset.is_valid())

    def save(self):
        self.form.save()
        if self.form.instance.fieldType == 'list':
            #
            # Здесь проверка не на существование self.optionsFormset, потому что при
            # заведении нового динамического поля формсет показывается, но должен быть
            # сохранён, только если созданное динамическое поле имеет тип «выбор из списка»
            #
            # Дополнительно существование optionsFormset проверять не надо. Для
            # существующего динамического поля формсет создаётся тогда и только тогда, когда
            # это динамическое поле имеет тип «выбор из файла», а тип динамического поля
            # нельзя поменять после создания.
            #
            self.optionsFormset.save()
Beispiel #4
0
class FieldFormAndFormset(object):

  def __init__(self, request=None, instance=None):
    field = instance # alias
    post = None if not request else request.POST

    self.form = FieldForm(post, instance=field)
    self.optionsFormset = None

    # Создание формсета, если необходимо
    if not field or (field and field.fieldType == 'list'):
      # Используем form=<наш базовый класс формы>!
      OptionsFormset = inlineformset_factory(Field, FieldOption, form=ModelForm)
      #
      # Передаём instance=form.instance, а не field.  В качестве field мог
      # быть передан None; в этом случае пустой instance создаётся внутри
      # конструктора формы.
      #
      # При выполнении сохранения формсет пунктов списка будет обращаться к
      # заданному instance за идентификатором динамического поля.  В случае,
      # когда на странице добавляется новое динамическое поле (а не редактируется
      # существующее), особо важно, чтобы instance, на который ссылаются форма
      # и формсет, был одним объектом, чтобы формсет узнал идентификатор
      # вновь добавленной записи.
      #
      self.optionsFormset = OptionsFormset(post, instance=self.form.instance)

  def is_valid(self):
    return self.form.is_valid() and (not self.optionsFormset or self.optionsFormset.is_valid())

  def save(self):
    self.form.save()
    if self.form.instance.fieldType == 'list':
      #
      # Здесь проверка не на существование self.optionsFormset, потому что при
      # заведении нового динамического поля формсет показывается, но должен быть
      # сохранён, только если созданное динамическое поле имеет тип «выбор из списка»
      #
      # Дополнительно существование optionsFormset проверять не надо. Для
      # существующего динамического поля формсет создаётся тогда и только тогда, когда
      # это динамическое поле имеет тип «выбор из файла», а тип динамического поля
      # нельзя поменять после создания.
      #
      self.optionsFormset.save()
Beispiel #5
0
  def __init__(self, request=None, instance=None):
    field = instance # alias
    post = None if not request else request.POST

    self.form = FieldForm(post, instance=field)
    self.optionsFormset = None

    # Создание формсета, если необходимо
    if not field or (field and field.fieldType == 'list'):
      # Используем form=<наш базовый класс формы>!
      OptionsFormset = inlineformset_factory(Field, FieldOption, form=ModelForm)
      #
      # Передаём instance=form.instance, а не field.  В качестве field мог
      # быть передан None; в этом случае пустой instance создаётся внутри
      # конструктора формы.
      #
      # При выполнении сохранения формсет пунктов списка будет обращаться к
      # заданному instance за идентификатором динамического поля.  В случае,
      # когда на странице добавляется новое динамическое поле (а не редактируется
      # существующее), особо важно, чтобы instance, на который ссылаются форма
      # и формсет, был одним объектом, чтобы формсет узнал идентификатор
      # вновь добавленной записи.
      #
      self.optionsFormset = OptionsFormset(post, instance=self.form.instance)
Beispiel #6
0
    def post(self, request, slug):
        instance = get_object_or_404(Field, slug=slug)
        form = FieldForm(request.POST, instance=instance)

        if form.is_valid():
            form.save()

            return redirect('/fields/{}/'.format(slug))

        messages.add_message(request, messages.INFO, 'Данные неккоректны')

        return render(request, 'fields/field_add.html', {'form': FieldForm()})


# class CropView(View):
#     def get(self, request):
#         crops = Field.objects.prefetch_related().all()
#
#         for crop in crops:
#             print('{}'.format(crop.name, crop.season))
#
#         return render(request, 'fields/field_add.html', {'form': FieldForm()})
Beispiel #7
0
    def get(self, request, slug):
        instance = get_object_or_404(Field, slug=slug)

        return render(request, 'fields/field_add.html',
                      {'form': FieldForm(instance=instance)})
Beispiel #8
0
 def get(self, request):
     return render(request, 'fields/field_add.html', {'form': FieldForm()})