Использование аргумента Django "through" для сохранения дополнительной информации в поле ManyToMany
Я пытаюсь создать сценарий, в котором я могу добавить "порядок" уровня (чтобы добавить степень эскалации) для сохраненных экземпляров модели "ContactPerson" в соответствии с некоторыми критериями (скажем старшинство или позиция ответственности). Форма должна выглядеть примерно так:
Contact Person | Level |
---|---|
Franc Correa | 2 |
Liz Burnett | 3 |
Christian Amarilo | 3 |
Mark Tannit |
Значения Level будут введены во время выполнения в (уже) созданные контактные лица. (Пустое поле последней записи в приведенной выше таблице означает, что уровень еще не назначен.)
Я создал следующие модели:
class ContactPerson(models.Model):
name = models.CharField(max_length=128)
designation = models.CharField(max_length=128)
class Level(models.Model):
level = models.PositiveSmallIntegerField()
desig_person = models.ManyToManyField(ContactPerson, through='Order')
class Order(models.Model):
contact_person = models.ForeignKey(ContactPerson, on_delete=models.CASCADE)
level_order = models.ForeignKey(Level, on_delete=models.CASCADE)
location = ...
Сейчас я создаю/добавляю персоны (в модели ContactPerson) и позже хочу назначить "уровень/степень эскалации" в модели "Order" в поле level_order
во время выполнения. С этой целью я использую следующую форму модели и присваиваю в поле inlineformset_factory
:
class AssignEscalationLevelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AssignEscalationLevelForm, self).__init__(*args, **kwargs)
self.auto_id = True
class Meta:
model = Order
fields = ('contact_person', 'level_order', 'location')
Как уже говорилось выше, я хочу, чтобы поле level_order
размещалось рядом с всеми сохраненными значениями поля contact_person
в одной строке. Однако я получаю все значения contact_person
в виде выпадающего списка и выпадающее поле blank
(для ввода числового порядка) для level_order
рядом с ним в той же строке. Я хочу отобразить все значения Contact Person в последовательных строках и поле для level_order
(как показано в таблице вверху).
Может ли кто-нибудь подсказать мне, где я ошибаюсь. Это первый раз, когда я использую аргумент Django through
и я не очень уверен, что все правильно понял.
Спасибо
Примечание: Модель уровня заголовка здесь не показана.