首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖Django中的保存vs自定义字段

覆盖Django中的保存vs自定义字段
EN

Stack Overflow用户
提问于 2015-02-28 13:38:05
回答 1查看 635关注 0票数 0

我正在为django应用程序编写代码,我需要一个来自其他两个模型的值的模型字段。

我创建该字段是因为我希望将它的值存储在DB中,而不是将它的值保留为视图/admin中的编码逻辑。到目前为止,我已经通过一个在保存之前调用模型方法的填充脚本来存储所有的值。

我面临的问题是,我不知道如何创建一个可以从填充脚本(称为cron活动日)和默认django结构(主要是admin和视图)调用的解决方案。

我希望它能够通过管理更改表单编辑,但间接地(更改其他2个值),如果可能的话,显示它。

我应该创建一个自定义字段还是重写保存方法?在创建字段时,是否可以避免将值赋值?我可以编写一个默认值和一个blank = true,但是不能确保值是正确的。

Models.py

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-03-01 16:32:30

如何使用以下结构:

代码语言:javascript
复制
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进行此操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28782330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档