Как инстанцировать модель с помощью функции init в modelforms?

У меня есть программа, которая загружает данные в формате csv, чтобы сопоставить значения в csv с другими значениями. Для этого пользователь должен выбрать, какие колонки в csv ему нужны для создания сопоставления, чтобы на странице сопоставления не было лишней информации.

Для этого я создал динамический Django, переопределив функцию init в моей ModelForm. Проблема в том, что хотя я могу динамически отображать значения столбцов, когда пользователь пытается выбрать значения и сохранить их в модели, это не удается, потому что выбор модели не совпадает с динамическими значениями флажков. Поэтому я переопределил функцию init модели, чтобы заполнить выбор модели. Моя проблема в том, что я не уверен, как инстанцировать модель в ModelForm, чтобы вызвать функцию init.

модель

class ColumnMapping(models.Model):
    CHOICES =[('row_1', 'A'), ('row_2', 'B'), ('row_3', 'C')]
    company = models.ForeignKey(RawData, on_delete=models.CASCADE)
    columnNames = MultiSelectField(max_length=100, choices=CHOICES)
    
    def __init__(self, *args, **kwargs):
        self.choices = kwargs.pop('choices')
        super(ColumnMapping, self).__init__(*args, **kwargs)
        self._meta.get_field.choices = self.choices

form - я думаю, что здесь должно что-то произойти в классе Meta, но поскольку строка model = ColumnMapping не инстанцирует модель (я не думаю), я не думаю, что могу передавать ей переменные.

class ColumnMappingForm(ModelForm):

    def __init__(self, *args, **kwargs):
        self.choices = kwargs.pop('choices')
        super(ColumnMappingForm, self).__init__(*args, **kwargs)
        self.fields['columnNames'].widget.attrs.update({'class': 'form-check'})
        self.fields['columnNames'].choices = self.choices

    class Meta:
        model = ColumnMapping
        fields = ('columnNames',)

просмотров

def columnSelection(request, companyName):
    companyData = RawData.objects.get(companyName = companyName)
    columnNames = list(RawData.objects.get_columnNames(companyData.file.name))
    columnNamesTuple = ()
    for columnName in columnNames:
        tup = (columnName, columnName)
        columnNamesTuple = list(columnNamesTuple)
        columnNamesTuple.append(tup)
        columnNamesTuple = tuple(columnNamesTuple)
    if request.method == "POST":
        form = ColumnMappingForm(request.POST, choices=columnNamesTuple)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse("mappingApp:productMapping", kwargs={'companyName': companyData.companyName}))
        else:
            error = list(form.errors.values())[0]
            return render(request, "mappingApp/columnSelection.html", {
                "form": form,
                "columnNames": columnNames,
                "company": companyData,
                "error": error
            })
    else:
        form = ColumnMappingForm(choices=columnNamesTuple)

        return render(request, "mappingApp/columnSelection.html", {
            "form": form,
            "columnNames": columnNames,
            "company": companyData
            })
Вернуться на верх