简介
您好!!!!!我已经找到了解决这个问题的方法 - 到目前为止我发现的最近的事情是this,而且我没有足够的答案。
背景
以下是一个让我的问题更清楚的人为例子。
我感兴趣的是在表单中的每个条目可以对应于同一父模型的不同子类的情况下使用inlineformset_factory
。例如,假设我有一个包含许多输入项的表单模型:
class Form(models.Model):
name = models.CharField(max_length=30)
然后,我有一个Input
模型及其子类:
class Input(models.Model):
class Meta:
abstract = True
form = models.ForeignKey(Form)
name = models.CharField(max_length=30)
class ShortInput(Input):
value = models.CharField(max_length=20)
class TweetInput(Input):
value = models.CharField(max_length=140)
class BinaryInput(Input):
value = models.TextField(blank=True)
基本上,它是包含各种类型数据的表单。重要的是ShortInput
个实例在后端只占用20个字符的空间,而BinaryInput
个实例拥有大量的存储空间。另请注意,Input
的每个子类都将始终具有value
字段,但它们可能具有不同的长度/类型。
我现在要做的是使用inlineformset_factory
来构建Form
模型。看起来像这样:
form = inlineformset_factory(
Form,
Input,
fk_name='form',
fields=['value']
)
这里的目的是构建一个表单,我可以在其中编辑数据库中每个Input
条目的值。
问题
对于inlineformset_factory
来电,Django抱怨Input
没有名为value
的字段。
问题
我觉得我应该能够处理这个问题,因为我可以保证每个Input
子类 都有value
属性 - 我只需要告诉Django某种程度上来说。我正在寻找的理想之处是:
class Input(models.Model):
class Meta:
abstract = True
guaranteed_subclass_fields = [
'value',
]
...
换句话说,一种告诉Django的方法,它可以在子类中期望value
字段。
我正在寻找的另一个最好的方法是向Django指定它可以依赖现有的value
字段。
最后,如果这一切都不可能,我正在寻找一些其他(可能是hackish)方式将我的Input
课程带有value
字段传递给inlineformset_factory
功能 - 可能忽略错误或类似的东西。 (虽然无论解决方案多么具体,但我希望它涉及使用inlineformset_factory
)
提前感谢您的帮助!