форма для объекта formset не имеет атрибута 'cleaned deta' - PullRequest
0 голосов
/ 01 мая 2020

У меня есть genericview, который обрабатывает 3 разностные формы (2 набора форм), когда я пытаюсь проверить cleaned_data, у меня возникает ошибка, но когда я пытаюсь сделать то же самое с помощью отладчика, я не вижу никаких проблем, кто может знать, почему я могу ' t сделать это?

My View:

class CompanyCreateView(LoginRequiredMixin, CreateView):
    model = Company
    template_name = 'main/company/create_page.html'
    form_class = CompanyCreateForm

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['page'] = Page.objects.active().filter(slug='add_company').first()
    if self.request.POST:
        context['images'] = ImageGalleryFormSet(self.request.POST, self.request.FILES)
        context['company_locations'] = CompanyLocationFormset(self.request.POST)
    else:
        context['images'] = ImageGalleryFormSet(self.request.GET or None)
        context['company_locations'] = CompanyLocationFormset(self.request.GET or None)
    return context

@transaction.atomic
def form_valid(self, form):
    context = self.get_context_data()

    images = context['images']
    company_locations = context['company_locations']

    self.object = form.save()
    self.object.active = False
    self.object.status = CompanyConstants.CompanyStatus.NEW
    self.object.owner = self.request.user
    self.object.save()
    for image in range(len(images)):
        key_image = 'gallery_items-' + str(image) + '-image'
        form_image = self.request.FILES.get(key_image)
        if form_image:
            ImageGallery(image=form_image, company_id=int(self.object.id)).save()


    print(company_locations.forms[0].get_cleaned_data)
    for location in range(len(company_locations)):
        key_locations = 'form-' + str(location) + '-location'
        key_address = 'form-' + str(location) + '-address'
        if self.request.POST.get(key_locations):
            location = self.request.POST.get(key_locations)
            address = self.request.POST.get(key_address)
            company = self.object

            CompanyLocation.objects.create(location=clean_location(location), address=address, company=company)


    return super().form_valid(form)

def get_success_url(self):
    return reverse('main:profile', args=[self.request.user.username])

Когда я пытаюсь напечатать это, у меня есть ошибка, этот код, который у меня работает, работает правильно, но он плох.

МОЯ ФОРМА:

class CompanyLocationForm(forms.ModelForm):
location = geo_forms.PointField(widget=GooglePointFieldWidget)

class Meta:
    model = CompanyLocation
    fields = ('location', 'address')


CompanyLocationFormset = formset_factory(CompanyLocationForm, max_num=10)

1 Ответ

0 голосов
/ 01 мая 2020

вам нужно очистить ваши данные, чтобы проверить проблему

 @transaction.atomic
 def form_valid(self, form):

 def clean(self):
  all_clean_data = super().clean()
  all_clean_data[['page'] = Page.objects.active().filter(slug='add_company').first()

... Так что я вижу много данных просто Тест

def Тест (запрос): if request.method == "ПОЧТА":

    form =CompanyLocationForm(data=request.POST)
    if form.is_valid():
          print(company_locations.forms[0].get_cleaned_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...