我正在为django应用程序编写代码,我需要一个来自其他两个模型的值的模型字段。
我创建该字段是因为我希望将它的值存储在DB中,而不是将它的值保留为视图/admin中的编码逻辑。到目前为止,我已经通过一个在保存之前调用模型方法的填充脚本来存储所有的值。
我面临的问题是,我不知道如何创建一个可以从填充脚本(称为cron活动日)和默认django结构(主要是admin和视图)调用的解决方案。
我希望它能够通过管理更改表单编辑,但间接地(更改其他2个值),如果可能的话,显示它。
我应该创建一个自定义字段还是重写保存方法?在创建字段时,是否可以避免将值赋值?我可以编写一个默认值和一个blank = true,但是不能确保值是正确的。
Models.py
class Valores(models.Model):
TARIFAS = (
('1', '2.0A'),
('2', '2.0DHA'),
('3', '2.0DHS'),
# (None, 'Elije una tarifa')
)
PERIODO_TAR = (
('1', 'Punta'),
('2', 'Valle'),
('3', 'Supervalle'),
# (None, 'Elije una tarifa')
)
PERIODO_HOR = (
('1', '00-01'),
('2', '01-02'),
('3', '02-03'),
('4', '03-04'),
('5', '04-05'),
('6', '05-06'),
('7', '06-07'),
('8', '07-08'),
('9', '08-09'),
('10', '09-10'),
('11', '10-11'),
('12', '11-12'),
('13', '12-13'),
('14', '13-14'),
('15', '14-15'),
('16', '15-16'),
('17', '16-17'),
('18', '17-18'),
('19', '18-19'),
('20', '19-20'),
('21', '20-21'),
('22', '21-22'),
('23', '22-23'),
('24', '23-24'), # (None, 'Elije un periodo horario')
)
per_hor = models.IntegerField(
'periodo horario',
choices=PERIODO_HOR
)
per_tar = models.IntegerField(
'periodo tarifario',
choices=PERIODO_TAR
)
tar = models.IntegerField(
'tarifa',
choices=TARIFAS
)
def periodo_tarifario(self):
# Devuelve el periodo tarifario
if self.tar == 1:
return 1
elif self.tar == 2:
if 12 < self.per_hor < 23:
return 1
else:
return 2
elif self.tar == 3:
if 1 < self.per_hor < 8:
return 3
elif 8 < self.per_hor < 14 or self.per_hor == 1 or self.per_hor == 24:
return 2
else:
return 1发布于 2015-03-01 16:32:30
如何使用以下结构:
class MyModel(models.Model):
A_Field=models.IntegerField()
B_Field=models.IntegerField()
C_Field=models.IntegerField(null=True, blank=True)#this is the generated field
def get_C(self):
return self.A_Field+self.B_Field
def save(self, force_insert=False, force_update=False):
self.C_Field=self.get_C()
super(MyModel, self).save(force_insert, force_update)分配一个已经正确的默认值(例如,字段定义中的default = get_C )将失败,因为A_Field和B_Field在此时没有值--您需要立即对其进行评估,只要您以一种形式更改A和B,就需要使用JS进行此操作。
https://stackoverflow.com/questions/28782330
复制相似问题