我正在围绕防火墙策略更改请求构建一个简单的应用程序。我很难理解如何设置我的模型和表单,以便可以在一个视图中完成所有规则请求。
这是我的模型和表单的简化版本,以找到问题的根源。我正在使用从RuleRequest
到Address
的一些外键,因为这是我对如何建立一对多关系的理解,因为RuleRequest
可以有很多源和目标{ {1}}但Address
只有一个Address
。
RuleRequest
截至目前,我得到:
# Models
class Address(CreatedUpdatedModel):
ipv4_address = IPAddressField(null=True)
class RuleRequest(CreatedUpdatedModel):
sources = models.ForeignKey(Address, related_name='rule_requests_source', null=True)
destinations = models.ForeignKey(Address, related_name='rule_requests_destination', null=True)
# Forms
class AddressForm(BootstrapMixin, forms.ModelForm):
class Meta:
model = Address
fields = [
'ipv4_address'
]
class RuleRequestForm(BootstrapMixin, forms.ModelForm):
sources = inlineformset_factory(RuleRequest, Address, AddressForm, fk_name='rule_requests_source')
destinations = inlineformset_factory(RuleRequest, Address, AddressForm, fk_name='rule_requests_destination')
class Meta:
model = RuleRequest
fields = [
'sources', 'destinations',
]
答案 0 :(得分:0)
实际上,一对多关系是表单到RuleRequest的地址。一个或多个目的地可以有一个地址,但地址可以有很多地址。
答案 1 :(得分:0)
你正在向后做。 ForeignKey字段应位于一对多的许多方面。
由于Address只能有一个RuleRequest,因此Address应该有ForeignKey字段。
并且无需传递fk_name
或related_name
参数。这些用于其他目的:当你在pk(id)以外的字段上加入相关模型时使用fk_name
,你没有在这里做。除非另有说明,否则Django加入id
,除非你有特殊的理由,否则你应该这样做。并且related_name
用于更改默认的反向关系的名称..这与您的情况无关。