Как получить данные из форм? - PullRequest
0 голосов
/ 02 апреля 2019

Как я могу получить данные из формы (ProductCreateForm)?

Если я пишу form = self.get_form(), то я просто получаю шаблон формы, в котором некоторые данные выбраны, а некоторые нет (выберите особо).

Если я пишу form = ProductCreateForm(request.POST), то получаю сообщение об ошибке, что запрос не найден. Возможно, это связано с тем, что я установил запрос в get_context_data () и работаю с ними в методе __init__ в forms.py.

Я обрабатываю данные чистым методом в forms.py.

У меня есть следующий view

class ProductsCreate(CreateView):
    model = Product
    form_class = ProductCreateForm
    http_method_names = ['get', 'post']

    def get_initial(self):
        initial = super(ProductsCreate, self).get_initial()
        initial['request'] = self.request

        return initial
​
    def get_context_data(self, *args, **kwargs):
        ctx=super(ProductsCreate, self).get_context_data(*args, **kwargs)
        ctx['special_form'] = SpeciallyPriceForm()

        return ctx
​
    def get(self, request, *args, **kwargs):
        self.object = None

        if kwargs.get('slug'):
            category = Category.objects.filter(slug=kwargs.get('slug')).first()
            self.initial.update({'category': category})

        return self.render_to_response(self.get_context_data())

    def post(self, request, *args, **kwargs):
        self.object = None
        form = ProductCreateForm(request.POST)     #What here?
        special_form = SpeciallyPriceForm(self.request.POST)
​
        if form.is_valid() and special_form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

Форма

class ProductCreateForm(forms.ModelForm):
    #....
​
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('initial').get('request')
        super(ProductCreateForm, self).__init__(*args, **kwargs)
        #...
        user = self.request.user
        provider = Provider.objects.filter(user=user.id).last()
        self.fields['category'] = ModelMultipleChoiceField(queryset=provider.category.all())
        #...

   def clean(self):
        cleaned_data = super(ProductCreateForm, self).clean()
        cd_category = cleaned_data.get('category')
        #...
​
​
class SpeciallyPriceForm(forms.ModelForm):
    class Meta:
        model = SpeciallyPrice
        fields = ['adittional_specially_price', 'adittional_specially_number']

1 Ответ

0 голосов
/ 02 апреля 2019

1.Просьба пройти запрос таким образом

def get_initial(self):
    """
    Returns the initial data to use for forms on this view.
    """
     initial = super(ProductsCreate, self).get_initial()

    initial['request'] = self.request

   return initial

тогда в forms.py

    def __init__(self):
         kwargs.pop('initial').get('request')
  1. Вы уверены, что работает вообще? На init в ваших формах я не вижу вызова super (), поэтому вы должны получить ошибку?

  2. У вас есть проблемы только с полем категории, остальные данные вы получаете правильно?

  3. Куда вы его передаете kwargs.pop ('request') ??

  4. Вы можете распечатать и проверить, что находится в self.request.POST

...