理解内联表单集中的Django ForeignKey关系

时间:2017-08-21 14:23:03

标签: python django django-models django-forms

我正在围绕防火墙策略更改请求构建一个简单的应用程序。我很难理解如何设置我的模型和表单,以便可以在一个视图中完成所有规则请求。

这是我的模型和表单的简化版本,以找到问题的根源。我正在使用从RuleRequestAddress的一些外键,因为这是我对如何建立一对多关系的理解,因为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', ]

2 个答案:

答案 0 :(得分:0)

实际上,一对多关系是表单到RuleRequest的地址。一个或多个目的地可以有一个地址,但地址可以有很多地址。

答案 1 :(得分:0)

你正在向后做。 ForeignKey字段应位于一对多的许多方面。

由于Address只能有一个RuleRequest,因此Address应该有ForeignKey字段。

并且无需传递fk_namerelated_name参数。这些用于其他目的:当你在pk(id)以外的字段上加入相关模型时使用fk_name,你没有在这里做。除非另有说明,否则Django加入id,除非你有特殊的理由,否则你应该这样做。并且related_name用于更改默认的反向关系的名称..这与您的情况无关。