Проблемы с django Group formsets
Я пытаюсь реализовать групповую форму, где выбор в поле модели будет определять варианты в другом поле.
models.py
class RechargeData(models.Model, Main):
user = models.ForeignKey(User, default=1,on_delete=models.CASCADE)
mobile_number = models.CharField( max_length=11) # validators should be a list
type = models.CharField(choices=Main.TYPES, max_length=10)
operator = models.CharField(max_length=15)
circle = models.CharField(max_length=20)
plan = models.DecimalField(max_digits=6, decimal_places=2)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
plan_id = models.DecimalField(max_digits=6, decimal_places=2)
network_id = models.DecimalField(max_digits=6, decimal_places=2)
api_development_no = models.CharField(max_length=15)
class Meta:
ordering = ["-timestamp"]
fields.py
class GroupedModelChoiceField(ModelChoiceField):
def __init__(self, *args, choices_groupby, **kwargs):
if isinstance(choices_groupby, str):
choices_groupby = attrgetter(choices_groupby)
elif not callable(choices_groupby):
raise TypeError('choices_groupby must either be a str or a callable accepting a single argument')
self.iterator = partial(GroupedModelChoiceIterator, groupby=choices_groupby)
super().__init__(*args, **kwargs)
forms.py
class RechargeDataForm (forms.ModelForm):
class Meta:
model = RechargeData
fields = ['mobile_number', 'type', 'operator', 'circle', 'plan']
class GroupedRechargeDataForm(forms.ModelForm):
operator = GroupedModelChoiceField(queryset=operator.objects.exclude(operator=None), choices_groupby='operator')
class Meta:
model = RechargeData
fields = ['mobile_number', 'type', 'operator', 'circle', 'plan']
Вывод формы дает другой результат, получая только поле оператора, созданное в модели, но я пытаюсь вывести остальную форму на основе выбора оператора. например.
если пользователь выбирает Mtn в качестве оператора, то цикл, план, тип, network_id, plan_id будут только извлекать все конкретные поля в моделях, созданных и привязанных к MTN, если выбран Airtel, то выбор в других формах должен быть основан только на airtel. Я использовал Queresets, так как администратору придется сначала создать объекты модели, прежде чем пользователи выберут запрашиваемые объекты в форме пользователя.
Я не получил желаемого результата с этим кодом выше, и любая помощь будет высоко оценена.
Чтобы упростить задачу, если вы не хотите использовать js.
Создайте другую модель под названием Operator, затем добавьте цикл, план, тип, network_id, planan_id как поля к этой модели.
Тогда в RechargeData модели сделайте operator поле с иностранным ключом для Operator модели