我的模型:
class End_User(models.Model):
location = models.ForeignKey(Location)
first_name = models.CharField(max_length=70, blank=True, null=True)
email_address = models.CharField(max_length=70, blank=True, null=True)
class Phone_Client(models.Model):
end_user = models.ManyToManyField(End_User)
...
extensions = models.CharField(max_length=20)
class Line(models.Model):
phone_client = models.ManyToManyField(Phone_Client, through='Phone_Line' )
....
voicemail = models.BooleanField(default=False)
class Phone_Line(models.Model):
phone_client = models.ForeignKey(Phone_Client)
line = models.ForeignKey(Line)
line_index = models.IntegerField()
所以基本上一个终端用户可以有很多电话,一个电话可以有很多线路,通过Phone_line关联。
我的页面需要在同一页面中为 Phone_Clients 和 Line 创建所有这些对象可编辑的运行时和新实例。目前我正在为 Phone_Client 和 Lines 创建一个简单的 End_User 模型表单和 modelformset_factory 对象。由于电话可以有很多行,所以 phone_formset 中的每个电话表单都可以有一个线路表单集对象。我目前正在做这样的事情
end_user = End_User.objects.get(pk=user_id)
user_form = End_UserForm(instance=end_user)
Phone_ClientFormSet = modelformset_factory(Phone_Client,form=PartialPhone_ClientForm, extra=0, can_delete=True)
phone_clients_formset = Phone_ClientFormSet(queryset=end_user.phone_client_set.all(), prefix='phone_client')
all_lines = modelformset_factory(Line, form=PartialLineForm, extra=0, can_delete=True)
phone_clients = end_user.phone_client_set.all()
client_lines_formsets = {}
for phone in phone_clients:
client_lines_formsets[phone.id] = all_lines(queryset=phone.line_set.all(), prefix='phone_client_'+str(phone.id))
我正在使用此列表使用表单集在模板中显示属于 phone_client 的行。
我有以下问题,关于模型
我可以使用 inline_formset 工厂来处理包含直通类的多对多关系吗?如果是这样,我该如何通过关系对 Phone_Client、Line 和 Phone_Line 执行此操作?
我需要显示给定电话、线路组合的 line_index,如何在模板中执行此操作?我查看了
如何从 django 模板访问多对多“直通”表的属性? 我不想只显示,而是将值绑定到电话、线路组合(如果可能)在线路或电话表单集中,这样如果用户更改索引,我可以在发布表单集数据时将其保存在数据库中。
我是 django 的新手,所以非常感谢任何帮助。谢谢!!