2016-10-10 3 views
0

generic_inlineformset_factory을 사용하여 프런트 엔드 선택 사항을 저장할 수 없습니다. 내가 프런트 엔드에서 아무 것도 선택하지 않으면'generic_inlineformset_factory' ''NoneType '개체에'_meta '특성이 없습니다. "

는 라인 sports = sports_formset.save(commit=False)는 오류를 생성하지 않습니다,하지만 난 아무것도 선택하면, 나는 코드의 맨 아래에 'NoneType' object has no attribute '_meta'

# PROBLEM PART를 얻을.

# models 
class M2MProfilesToSportTypeGroups(models.Model): 
    MASTERY_CHOICES = (
     (1, _('newby')), 
     (2, _('amateur')), 
     (3, _('semi-pro')), 
     (4, _('pro')) 
    ) 

    mastery = models.IntegerField(_('mastery'), null=True, blank=True, choices=MASTERY_CHOICES) 
    sport_type_group = models.ForeignKey(SportTypesGroups, verbose_name=_('sport type group')) 

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 

# views 
class CompanyProfileCreateView(LoginRequiredMixin, TemplateView): 
    template_name = 'profiles/create_n_update.html' 

    def get(self, request, *args, **kwargs): 
     profile_form = CompanyProfileForm() #show_criterias=False) 

     PlaceTypeFormSet = inlineformset_factory(CompanyProfiles, M2MCompanyProfilesToPlaceTypeGroups, 
               fields='__all__', can_delete=False) 

     SportTypeFormSet = generic_inlineformset_factory(M2MProfilesToSportTypeGroups, 
                 can_delete=False) 

     places_formset = PlaceTypeFormSet() 
     sports_formset = SportTypeFormSet() 

     return self.render_to_response({'form': profile_form, 
             'places_formset': places_formset, 
             'sports_formset': sports_formset}) 

    def post(self, request, *args, **kwargs): 

     profile_form = CompanyProfileForm(data=request.POST) 


     PlaceTypeFormSet = inlineformset_factory(CompanyProfiles, M2MCompanyProfilesToPlaceTypeGroups, 
               fields='__all__', can_delete=False) 

     SportTypeFormSet = generic_inlineformset_factory(M2MProfilesToSportTypeGroups, 
                 can_delete=False) 

     places_formset = PlaceTypeFormSet(data=request.POST) 
     sports_formset = SportTypeFormSet(data=request.POST) 

     if profile_form.is_valid() and places_formset.is_valid() and sports_formset.is_valid(): 
      profile_form.instance.created_by = request.user 
      company_profile = profile_form.save() 

      places = places_formset.save(commit=False) 
      for place in places: 
       place.company_profile = company_profile 
       place.save() 

      # PROBLEM PART 
      sports = sports_formset.save(commit=False) 
      for sport in sports: 
       obj.content_object = company_profile 
       obj.save() 

      return redirect(company_profile) 

     return self.render_to_response({'form': profile_form, 
             'places_formset': places_formset, 
             'sports_formset': sports_formset}) 

감사의 말.

답변

0

발견 된 솔루션.

# PROBLEM PART이 변경됩니다 :

sports_formset = SportTypeFormSet(data=request.POST, instance=company_profile) 
sports_formset.save() 

우리가 장고, content_typeobject_id의 어떤 종류를 사용하여 알아 보자 company_profile 제공.

관련 문제