代码之家  ›  专栏  ›  技术社区  ›  chrise

django如何使用属性创建列条目

  •  0
  • chrise  · 技术社区  · 6 年前

    class Process(models.Model):
        name = models.CharField(max_length=50)
        start_utc = models.TimeField(db_column='start', null=True, blank=True)
        end_utc = models.TimeField(db_column='end', null=True, blank=True)
    

    我想添加一个属性

    我尝试使用@property方法,如

    https://docs.djangoproject.com/en/2.1/topics/db/models/
    

    其中,@属性在类定义中没有属性

    class Process(models.Model):
        name = models.CharField(max_length=50)
        start_utc = models.TimeField(db_column='start', null=True, blank=True)
        end_utc = models.TimeField(db_column='end', null=True, blank=True)
    
        @property
        def should_run(self):
            now = dt.datetime.utcnow().time()
            print(self.__str__(), now, self.start_utc, self.end_utc)
            return self.start_utc < now < self.end_utc
    

    但这样根本就没有创建列条目。

    我也试着用经典的方式

    class Process(models.Model):
        name = models.CharField(max_length=50)
        start_utc = models.TimeField(db_column='start', null=True, blank=True)
        end_utc = models.TimeField(db_column='end', null=True, blank=True)
        _should_run = models.BooleanField(default=False, db_column="should_run")
    
        @property
        def should_run(self):
            now = dt.datetime.utcnow().time()
            print(self.__str__(), now, self.start_utc, self.end_utc)
            return self.start_utc < now < self.end_utc
    
        @should_run.setter
        def should_run(self, val):
            self._should_run = val
    

    如何使它能够使用从@property getter获取的值创建一个列?

    编辑:

    from .models import Process
    
    class ProcessTable(tables.Table):
        class Meta:
            model = Process
            template_name = 'django_tables2/semantic.html'
    

    将呈现该表

    from .models import Process
    from .tables import ProcessTable
    
    def index(request):
        p = Process.objects.all()
        context = dict(table=ProcessTable(p))
        return render(request, 'processes/index.html', context)
    

    我想得到的是一个显示4列的呈现表

    name, start_utc, end_utc, should_run
    
    0 回复  |  直到 6 年前