Reputation: 655
I have a group of model classes that all need the same function. Rather than define this function in every model class, is there a more concise way to do this?
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
}
Upvotes: 0
Views: 153
Reputation: 1557
You could define functions in abstract base model, and extend this base model in other models. The documentation is here
In your code, it would be like
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'
Just have a try. I am not sure whether there is any bug in the code. Hope that could help you.
Upvotes: 2