我创建了一个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,如何创建特定于模式而不是完整应用程序的工厂?