使用django-schemas时inlineformset_factory选项未正确设置

时间:2018-10-04 14:00:36

标签: django django-forms

我创建了一个inlineformset_factory,但是当我在视图上实现Post方法时,系统提到我的内联表单无效。

经过一些调试后,我发现inlineformset_factory字段之一中的选择不正确,这是因为我正在使用django-schemas。 由于某种原因,在定义inlineformset_factory时,它使用公共模式而不是租户模式,这使我的inlineformset_factory字段中的选择不正确。

注意:使用inlineformset_factory的模型具有2个外键1和配置对象,另一个与用户一起,问题出在用户身上。

这是我拥有的代码

model.py

class Configuration(Control):
    uuid = kp.ObjectIDField()
    name = kp.ObjectNameField()
    description = kp.ObjectDescriptionField()

class ConfigurationMember(models.Model):
    uuid = kp.ObjectIDField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    owner = models.BooleanField(default=False)
    configuration = models.ForeignKey(Configuration, on_delete=models.CASCADE)

forms.py

 MemberFormSet = inlineformset_factory(Configuration, ConfigurationMember,
                                  fk_name='forecastConfiguration',
                                  fields=['user', 'owner'], can_delete=False, extra=3)

View.py

class ConfigurationCreateView(CreateView):
    model = Configuration
    form_class = ConfigurationCreateForm
    template_name = 'frontend/base/config_create.html'
    object = None
    # success_url = ''

    def get(self, request, *args, **kwargs):
        """
        Handles GET requests and instantiates blank versions of the form
        and its inline formsets.
        """
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        member_formset = MemberFormSet()

        return render(request, self.template_name, {'form': form, 'member_formset': member_formset})

    def post(self, request, *args, **kwargs):
        """
        Handles POST requests, instantiating a form instance and its inline
        formsets with the passed POST variables and then checking them for
        validity.
        """
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        member_formset = MemberFormSet(self.request.POST)
        if form.is_valid() and member_formset.is_valid():
            self.form_valid(form, member_formset)
            messages.add_message( self.request, messages.INFO, 'Your Configurations has been saved')
            return redirect(reverse('config_detail', kwargs={'uuid': self.object.uuid}))
        else:
            messages.add_message(self.request, messages.ERROR, 'Error when creating the Configuration')
            return render(request, self.template_name, {'form': form, 'member_formset': member_formset})

注意:我在调试时注意到,每次我启动服务器时,它所做的第一件事就是调用inlineformset_factory定义,当时系统确实已定义了一个架构,因此使用PUBLIC架构,但是,在我看来,inlineformset_factory是在系统上创建的,而不是创建一个新的inlineformset实例,它使用的是工厂提供的实例,该实例被错误地实例化了。

如果我使用scehmas,如何创建特定于模式而不是完整应用程序的工厂?

0 个答案:

没有答案