如何在models.py中为每个类模型重用__str__函数
大家好我开始使用Django Framework,我有一个问题。如何在models.py中为每个类模型重用__str__函数
Django的文件说,当我在课堂上年底创建类(模型),我应该写函数来对我的对象返回字符串值,这一切看起来就像这样:
class NameClass(models.Model):
field_name_1 = models.SomeTypeField()
field_name_2 = models.SomeTypeField()
field_name_3 = models.SomeTypeField()
...
field_name_n = models.SomeTypeField()
def __str__(self):
return self.field_name_1, ...self.field_name_n
在这种情况下,我写函数返回字符串值,导致我在我的模型中有很多字段,并将它们写入__str__
函数中,这将会是很多工作。所以我的功能是这样的:
def __str__(self):
fields =''
for x in self._meta.fields:
fields = fields + string.split(str(x),".")[2]+' '
return fields
现在的问题。如何在model.py中的每个类(模型)中重用此函数,而不复制粘贴此函数?
例如。我有很多的类(mdoels):
class FirstModel(models.Model):
...
def __str__(self):
...
class SecondModel(models.Model):
...
def __str__(self):
...
class ThirdModel(models.Model):
...
def __str__(self):
...
class EtcModel(models.Model):
....
def __str__(self):
而且我不想复制粘贴功能我每次,可能存在某种方式来使用它像一个全局函数或另一种方式来解决这个问题。
你可以使用继承(从一个基类,提供你想要的__str__
方法继承你的类不同)。
或者,如果这不适合你,你只是想以最简单的方式分享这个方法的实现,你可以在你的类中分配方法而不是定义它们。
def mystrfunction(self):
return whatever
class Class1(object):
...
__str__ = mystrfunction
class Class2(object):
...
__str__ = mystrfunction
外,定义一个函数,
def foo(obj):
fields =''
for x in obj._meta.fields:
fields = fields + string.split(str(x),".")[2]+' '
return fields
类里面,
class FirstModel(models.Model):
...
__str__ = foo
学分:'__str__ = foo'的khelwood。 – frederick99
我使用了冗余版本。类似于if(a == b)返回true;否则返回false;' – frederick99
@downvoter尽管'def __str __(self):return foo(self)'它并没有错。 – frederick99
如果你的类只共享相同的方法,你可以使用一个混合:
class BaseMixin(object):
def __str__(self):
return self.something
class Foo(BaseMixin, models.Model):
# ...
对于共享相同的字段和方法的所有车型,您可以创建一个abstract base class例如:
class Base(models.Model):
class Meta:
abstract = True
title = models.CharField(max_length=255)
def __str__(self):
return self.title
class Foo(Base):
# ...
欢迎来到StackOverflow! – frederick99