首页 > 解决方案 > 如何使用 form.instance 保存多对多数据?

问题描述

我正在写一个应用程序Django

如何使用. provider.category_formform.instance

楷模

class RequestProvider(models.Model):
    category = models.ManyToManyField(Category, related_name="provider_request")

形式

class ProviderForm(forms.ModelForm):
    class Meta:
        model = RequestProvider
        fields = ('category',)
        widgets = {
            'category': forms.SelectMultiple(
                attrs={
                    'class': 'select2',
                    'style': 'width: 246px;'
                }
            ),
        }

意见

@method_decorator(currency_account_dec, name='dispatch')
class ProviderCreateView(CreateView):
    form_class = ProviderForm
    template_name = 'provider_create.html'

    def form_valid(self, form):
        provider_id = self.kwargs.get('provider_id',None)
        session_user = self.request.user
        if provider_id:
            form.instance.provider = Provider.objects.get(pk=provider_id)
        form.instance.user = self.request.user
        #form.instance.category = form.cleaned_data.get('category')
        return super(ProviderCreateView,self).form_valid(form)

    def get_context_data(self, **kwargs):
        provider_id = self.kwargs.get('provider_id',None)
        ss = RequestProvider.objects.filter(user=self.request.user)
        for s in ss:
            print(s.category)
        ctx = super(ProviderCreateView, self).get_context_data(**kwargs)
        ctx['organizations'] = Organization.objects.filter(user=self.request.user)
        ctx['payments'] = Payment.objects.all()
        if provider_id:
            this_provider = Provider.objects.get(pk=provider_id)
            ctx['this_provider'] = this_provider
            ctx['categories'] = Category.objects.all()
            ctx['roles'] = this_provider.role.all()
            ctx['payments'] = Payment.objects.all()
            ctx['deliveries'] = Delivery.objects.all()
        return ctx

标签: djangodjango-formsdjango-views

解决方案


我相信你能做到form.save()


推荐阅读