我如何在 Django 模型管理器中修改我的创建函数
How do i modify my create function in Django model manager
所以我有这个模型:
class Token(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
code = models.IntegerField(default=code)
date_created = models.DateTimeField(auto_now_add=True)
expiration_date = models.DateTimeField(null=False, blank=True)
如您所见,我有一个 expiration_date
字段。我将其设置为 (null=False, blank=True)
的原因是因为我希望它根据 date_created
字段自行填充,并且我试图通过模型管理器创建方法
来实现
除了自定义用户模型管理器之外,我在模型管理器方面几乎没有经验。
这是我第一次失败的尝试:
class TokenManager(models.Manager):
def create(self, user, code, date_created):
exp = date_created + datetime.timedelta(minutes=10)
token = self.model(user=user, code=code, date_created=date_created, expiration_date=exp)
token.save()
return token
基本上我的目标是获取 date_created
字段的值,将值加上 10 分钟并将其设置为 expiration_date
。谁能帮我解决这个问题?
这里不需要使用ModelManger。您可以通过覆盖 save
方法来基于字段 date_created
设置 expiration_date
。
编辑:
无法在保存方法中使用 self.date_created 日期时间。但是可以使用 django.utils.timezone.now()
也可以使用 auto_now_add
.
from django.utils import timezone
class Token(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
code = models.IntegerField(default=code)
date_created = models.DateTimeField(auto_now_add=True)
expiration_date = models.DateTimeField(null=False, blank=True)
def save(self, *args, **kwargs):
# Set the expiration_date based on the value of auto_now_add
self.expiration_date = timezone.now() + datetime.timedelta(minutes=10)
super(Token, self).save(*args, **kwargs)
所以我有这个模型:
class Token(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
code = models.IntegerField(default=code)
date_created = models.DateTimeField(auto_now_add=True)
expiration_date = models.DateTimeField(null=False, blank=True)
如您所见,我有一个 expiration_date
字段。我将其设置为 (null=False, blank=True)
的原因是因为我希望它根据 date_created
字段自行填充,并且我试图通过模型管理器创建方法
除了自定义用户模型管理器之外,我在模型管理器方面几乎没有经验。 这是我第一次失败的尝试:
class TokenManager(models.Manager):
def create(self, user, code, date_created):
exp = date_created + datetime.timedelta(minutes=10)
token = self.model(user=user, code=code, date_created=date_created, expiration_date=exp)
token.save()
return token
基本上我的目标是获取 date_created
字段的值,将值加上 10 分钟并将其设置为 expiration_date
。谁能帮我解决这个问题?
这里不需要使用ModelManger。您可以通过覆盖 save
方法来基于字段 date_created
设置 expiration_date
。
编辑:
无法在保存方法中使用 self.date_created 日期时间。但是可以使用 django.utils.timezone.now()
也可以使用 auto_now_add
.
from django.utils import timezone
class Token(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
code = models.IntegerField(default=code)
date_created = models.DateTimeField(auto_now_add=True)
expiration_date = models.DateTimeField(null=False, blank=True)
def save(self, *args, **kwargs):
# Set the expiration_date based on the value of auto_now_add
self.expiration_date = timezone.now() + datetime.timedelta(minutes=10)
super(Token, self).save(*args, **kwargs)