Доступ «сквозных» полей отношения «многие ко многим» в наборах форм

Мои модели:

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 на одной странице. В настоящее время я создаю простую форму модели End_User и объекты modelformset_factory для Phone_Client и Lines. Поскольку телефон может иметь много линий, каждая форма телефона в 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 в шаблоне с использованием наборов форм.

У меня есть следующий вопрос, по моделям

  1. Могу ли я использовать фабрику inline_formset для обработки многих ко многим r? elation, содержащий сквозной класс? если да, то как мне сделать это для Phone_Client, Line и Phone_Line через отношение?

  2. Мне нужно отобразить line_index для данного телефона, комбинации линий, как мне это сделать в шаблоне? Я просмотрел
    Как получить доступ к свойствам "сквозной" таблицы "многие ко многим" из шаблона django? Я хочу не только отображать, но и привязывать значение к телефону, комбинации строк, если это возможно, в наборе форм линии или телефона, чтобы, если пользователь изменит индекс, я мог сохранить это в базе данных при публикации данных набора форм.

Я новичок в django, поэтому буду признателен за любую помощь. Спасибо!!

8
задан Community 23 May 2017 в 12:22
поделиться