Django模型方法变量放入模板
Django Model method variable put into template
我有一个模型,我想获取方法变量 "row_count and column" 计数以将值放入模板。
class Data(models.Model):
""" Model of Data"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
document = models.FileField(upload_to='documents/%Y/%m/%d')
uploaded_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(default=0, max_digits=6, decimal_places=2,
blank=True, null=True)
def calculate_amount(self):
# wb = xlrd.open_workbook('media/' + self.document.name)
wb = xlrd.open_workbook(os.path.join(settings.MEDIA_ROOT,
self.document.name))
worksheet = wb.sheet_by_index(0)
# Show this value into templates
row_count = worksheet.nrows
column_count = worksheet.ncols
您可以使用类似于以下代码段的内容,您的模型现在将具有 2 个新属性,row_count
和 columns_count
,可以在您的模板中调用它们,每个属性都将调用 calculate_amount
来检索它们的值。
我在 calculate_amount
上添加的 if 会阻止多次调用它以避免多次读取文件并可能减慢您的应用程序。
class Data(models.Model):
""" Model of Data"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
document = models.FileField(upload_to='documents/%Y/%m/%d')
uploaded_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(default=0, max_digits=6, decimal_places=2,
blank=True, null=True)
def calculate_amount(self):
if hasattr(self, '_row_count') or hasattr(self, '_column_count'):
return
# wb = xlrd.open_workbook('media/' + self.document.name)
wb = xlrd.open_workbook(os.path.join(settings.MEDIA_ROOT,
self.document.name))
worksheet = wb.sheet_by_index(0)
# Show this value into templates
self.row_count = worksheet.nrows
self.column_count = worksheet.ncols
@property
def row_count(self):
self.calculate_amount()
return self._row_count
@row_count.setter
def row_count(self, value):
self._row_count = value
@property
def column_count(self):
self.calculate_amount()
return self._column_count
@column_count.setter
def column_count(self, value):
self._column_count = value
更新为 property setters。
我有一个模型,我想获取方法变量 "row_count and column" 计数以将值放入模板。
class Data(models.Model):
""" Model of Data"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
document = models.FileField(upload_to='documents/%Y/%m/%d')
uploaded_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(default=0, max_digits=6, decimal_places=2,
blank=True, null=True)
def calculate_amount(self):
# wb = xlrd.open_workbook('media/' + self.document.name)
wb = xlrd.open_workbook(os.path.join(settings.MEDIA_ROOT,
self.document.name))
worksheet = wb.sheet_by_index(0)
# Show this value into templates
row_count = worksheet.nrows
column_count = worksheet.ncols
您可以使用类似于以下代码段的内容,您的模型现在将具有 2 个新属性,row_count
和 columns_count
,可以在您的模板中调用它们,每个属性都将调用 calculate_amount
来检索它们的值。
我在 calculate_amount
上添加的 if 会阻止多次调用它以避免多次读取文件并可能减慢您的应用程序。
class Data(models.Model):
""" Model of Data"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
document = models.FileField(upload_to='documents/%Y/%m/%d')
uploaded_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(default=0, max_digits=6, decimal_places=2,
blank=True, null=True)
def calculate_amount(self):
if hasattr(self, '_row_count') or hasattr(self, '_column_count'):
return
# wb = xlrd.open_workbook('media/' + self.document.name)
wb = xlrd.open_workbook(os.path.join(settings.MEDIA_ROOT,
self.document.name))
worksheet = wb.sheet_by_index(0)
# Show this value into templates
self.row_count = worksheet.nrows
self.column_count = worksheet.ncols
@property
def row_count(self):
self.calculate_amount()
return self._row_count
@row_count.setter
def row_count(self, value):
self._row_count = value
@property
def column_count(self):
self.calculate_amount()
return self._column_count
@column_count.setter
def column_count(self, value):
self._column_count = value
更新为 property setters。