Python 模型中的Django重复函数
我有一组模型类,它们都需要相同的函数。与其在每个模型类中定义这个函数,还有更简洁的方法吗Python 模型中的Django重复函数,python,django,Python,Django,我有一组模型类,它们都需要相同的函数。与其在每个模型类中定义这个函数,还有更简洁的方法吗 class Archive(models.Model): source = models.CharField(max_length=100, blank=True, null=True) total_size = models.FloatField(blank=True, null=True) number_of_files = models.FloatField(blank=Tru
class Archive(models.Model):
source = models.CharField(max_length=100, blank=True, null=True)
total_size = models.FloatField(blank=True, null=True)
number_of_files = models.FloatField(blank=True, null=True)
number_of_files_transferred = models.FloatField(blank=True, null=True)
class Meta:
db_table = 'archive'
def as_dict(self):
return {
"source": self.source,
"total_size": self.total_size,
"number_of_files": self.number_of_files,
"number_of_files_transferred": self.number_of_files_transferred
}
class FullNightlyMetrics(models.Model):
source = models.CharField(max_length=100, blank=True, null=True)
total_size = models.FloatField(blank=True, null=True)
number_of_files = models.FloatField(blank=True, null=True)
number_of_files_transferred = models.FloatField(blank=True, null=True)
class Meta:
db_table = 'full_nightly_metrics'
def as_dict(self):
return {
"source": self.source,
"total_size": self.total_size,
"number_of_files": self.number_of_files,
"number_of_files_transferred": self.number_of_files_transferred
}
您可以在抽象基础模型中定义函数,并在其他模型中扩展此基础模型。 在您的代码中,它将是
from django.db import models
class CommonInfo(models.Model):
source = models.CharField(max_length=100, blank=True, null=True)
total_size = models.FloatField(blank=True, null=True)
number_of_files = models.FloatField(blank=True, null=True)
number_of_files_transferred = models.FloatField(blank=True, null=True)
def as_dict(self):
return {
"source": self.source,
"total_size": self.total_size,
"number_of_files": self.number_of_files,
"number_of_files_transferred": self.number_of_files_transferred
}
class Meta:
abstract = True
class Archive(CommonInfo):
class Meta:
db_table = 'archive'
class FullNightlyMetrics(CommonInfo):
class Meta:
db_table = 'full_nightly_metrics'
试试看。我不确定代码中是否有bug。
希望这能对您有所帮助。您为什么不直接使用类呢?制作一个包含该方法的基础(抽象)模型,并让您的“模型组”继承自该方法。没有特别的Django解决方案(除了使模型抽象,这样它就不会创建不必要的DB表)。实例有什么问题吗?@Two Bitalchest我不确定是否可以使用抽象类。它是如何知道表的字段的?除了重复的问题(我认为这会帮助您)之外,这里有一个链接到。