我想让def保持,它的结果进入域d_reave,但无论我使用什么函数,它都不会显示任何东西,它只显示负数,这是我的代码,这是基本代码,给我一个实现它的方法,谢谢.

class sub(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key = True, editable = False)
    provider = models.CharField(max_length=70)
    tier = models.CharField(max_length=40)
    date_started = models.DateField(auto_now=False, auto_now_add=False)
    date_end = models.DateField(auto_now=False, auto_now_add=False, )
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=7, decimal_places=2, default=0)
    d_remain = models.IntegerField()#I want the value of def remain go to this filed 
    def remain(self):
        today = date.today()
        remaining_days = (self.date_end - today).days
        return(remaining_days)

    def get_absolute_url(self):
        return reverse('sub-detail', kwargs={'pk':self.id})

推荐答案

不要在数据库中存储完全函数依赖项.事实上,如果某些内容完全依赖于一(组)列(S),则将其存储为额外的列是没有意义的.在最好的情况下,它将需要额外的存储空间,但很可能也很难保持项的同步,因为现在对于列的每次更新,您还需要更新Dependent列.

在这种特定情况下,您每天都必须更新剩余天数.这将需要运行每日查询,这也可能失败,如果修改了date_end,您应该始终更新d_remaining列,这当然很容易导致数据不一致.

您可以定义一个属性,在必要时计算剩余天数:

from django.conf import settings


class Sub(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
    provider = models.CharField(max_length=70)
    tier = models.CharField(max_length=40)
    date_started = models.DateField()
    date_end = models.DateField()
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=7, decimal_places=2, default=0)
    # no d_remain

    @property
    def remain(self):
        return (self.date_end - date.today()).days

    def get_absolute_url(self):
        return reverse('sub-detail', kwargs={'pk': self.pk})

对于查询,我们可以使用以下命令查询:

Sub.objects.filter(date_end__lte=date.today() - timedelta(days=5))

以获得five天内结束的Sub美元.


Note:Django中的模型是用PascalCase编写的,而不是snake_case, 因此,您可能希望将模型从sub重命名为Sub.


Note:通常情况下,使用settings.AUTH_USER_MODEL [Django-doc]来引用用户模型比直接使用User model [Django-doc]要好.欲了解更多信息,您可以查看referencing the User model section of the documentation.

Django相关问答推荐

如果密码在Django中未被散列,则对其进行散列

如何在创建对象后立即运行一次代码?

无法将关键字average_rating解析为字段

APIView查询未返回任何结果

Django 模型:如何查找自动生成的字段列表

QuerySet对象在bulk_update中没有属性pk

如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

如何让 Django 在模板更改时重新启动运行服务器?

django REST 框架 - 嵌套 ModelSerializer 的有限查询集?

Django 模型中的隐藏字段

Django判断字段是否为空?

如何在 Django 测试框架中修改会话

如何在 Django 中向 ModelForm 添加外键字段?

django excel xlwt

django中的脏字段

Python 社区里的小马是怎么回事?

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?

Django 模型(1054,Unknown column in 'field list')

使用 Django REST 框架从多个模型返回结果