gpt4 book ai didi

django - 如何在我的所有模型上自动生成 __unicode__ 方法?

转载 作者:行者123 更新时间:2023-12-02 05:28:24 26 4
gpt4 key购买 nike

我正在处理一些 django 代码,其中所有模型都有 __unicode__ 方法,如下所示:

def __unicode__(self):
return str(self.id) + "; " + ", " + self.first_name + " " + self.last_name

(所有情况下的格式都是:打印 self.id ,然后用逗号分隔其余字段)。清理此类样板的最佳方法是什么?我正在考虑使用 __unicode__ 方法声明一个 MyModel 类,该方法通过检查列出所有字段,然后让我当前的所有模型继承自 MyModel而不是当前的 django.db.models.Model 。但这样做会改变底层的 MySQL 表,我不想为了这样的小事而进行如此大规模的迁移。

最佳答案

正如 Kevin Christopher Henry 所建议的,您可以创建一个 abstract base class并让你的所有模型继承它。这会工作得很好。

但是,Python 支持多类继承。这意味着一个类可以从多个基类继承。有关此主题的更多信息(我建议您阅读它,因为它可能很棘手)可以找到 here .

通过多个类继承,您可以创建一个至少在我看来更加干净的解决方案。您只需创建一个仅包含所需代码的类:

class PredefinedUnicodeMixin(object):
def __unicode__(self):
return str(self.id) + "; " + ", " + self.first_name + " " + self.last_name

正如您可能想象的那样,单独使用此类不会有太大帮助。但试试这个:

class MyModel(PredefinedUnicodeMixin, models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)

因为我们的 mixin 类首先列出,所以它会覆盖其他类中指定的任何属性和方法。

更改 __unicode__ 方法来迭代字段并不难,self._meta.get_all_field_names() 应该包含所有字段名称。

当然,在Python 3上你应该使用__str__而不是__unicode__

关于django - 如何在我的所有模型上自动生成 __unicode__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com