Пользовательский атрибут Django ModelField

Очень простой вопрос: можно ли сделать пользовательский атрибут для поля? У меня есть модель Customer с кучей полей. Charfields, ForeignKeys, IntegerFields, BooleanFields и т.д. и т.п.

Когда форма отправляется для нового клиента, я хочу экспортировать данные в существующий шаблон excel, где имена ячеек B1 и значение B2, например. Поэтому я думал просто дать каждому полю атрибут 'cell position', чтобы я мог просто пройтись по ячейкам и легко присвоить каждому столбцу свое значение, что-то вроде name = models.CharField(verbose_name='Name',max_length=30,'cell position' = 'B2'),

Возможно ли это? Если да или нет, то как мне это сделать?

Вы пытаетесь смешать логику данных и бизнес-логику. Вы описали один случай использования этой модели: когда она должна быть сохранена. Упомянутая вами cell position применима только к этому случаю использования и будет бесполезна, когда вам, например, нужно найти клиента по его имени.

Гораздо разумнее было бы поместить эти константы в файл, который отвечает за сохранение Customer в файл excel, примерно так:

class CustomerExcelExporter():
    CUSTOMER_FIELD_TO_FILE_CELLS = {
        "name": "B2",
        # ...
    }

    _worksheet: Worksheet
    _customer: Customer

    # ...

    def _fill_customer_own_fields(self):
        for field, cell in self.CUSTOMER_FIELD_TO_FILE_CELLS:
            self._worksheet.write(cell, getattr(self._customer, field)
Вернуться на верх