【问题标题】:Django ModelField custom attributeDjango 模型字段自定义属性
【发布时间】:2022-01-24 22:59:37
【问题描述】:

非常简单的问题:您可以为字段制作自定义属性吗? 我有一个带有一堆字段的客户模型。 Charfields、ForeignKeys、IntegerFields、BooleanFields 等。

当为新客户提交表单时,我想将数据导出到现有的 Excel 模板,其中单元格名称为 B1,值 B2。所以我想给每个字段一个“单元格位置”属性,这样我就可以遍历单元格并轻松地为每一列分配它们的值,比如name = models.CharField(verbose_name='Name',max_length=30,'cell position' = 'B2'),

这可能吗?如果是与否,我该怎么做?

【问题讨论】:

    标签: python django django-models django-model-field


    【解决方案1】:

    您试图将数据逻辑和业务逻辑混为一谈。您描述了该模型的一个用例:何时保存。您提到的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)
    

    【讨论】:

    • 哈!这更有意义,为什么我没有想到这一点?非常感谢!
    • @Samoht 很高兴为您提供帮助 :)
    • 我在实现这个时遇到了一个问题。我的“地址”单元格在我的模型中分为“街道”和“房屋号码”字段。如何将这 2 个变量合并为一个变量以使用 getattr?另外:你想到什么包来写工作表?我正在使用 openpyxl,它不会让我使用 _worksheet.write
    • 我建议您将CUSTOMER_FIELD_TO_FILE_CELLS 拆分为CUSTOMER_FIELD_TO_FILE_CELLS_PLAINCUSTOMER_FIELD_TO_FILE_CELLS_COMPLEX。第二个可能包含像{"address": ["C3", "C4"], ...} 这样的配置。然后您可以连接所有项目的值以获得address
    猜你喜欢
    • 2012-10-13
    • 2019-09-06
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2015-04-16
    • 2022-01-23
    相关资源
    最近更新 更多