Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模型中的Django重复函数_Python_Django - Fatal编程技术网

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我不确定是否可以使用抽象类。它是如何知道表的字段的?除了重复的问题(我认为这会帮助您)之外,这里有一个链接到。