gpt4 book ai didi

python - Django 1 模型 - DateTimeField()

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:58 25 4
gpt4 key购买 nike

我对 Django 和一般编程还很陌生,我面临着以前从未见过的挑战。我正在寻找有关 DateTimeField() 的一些帮助。

作为一个学习项目,我正在设置一个简单的旅行应用程序。我希望用户能够添加旅行、描述等。到目前为止,还不错。

我想将两个 DateTimeFields 添加到我的行程模型中。输入的开始日期必须是 future 的日期(从他们使用应用程序的时间开始),而结束日期必须在开始日期(natch)之后。我如何将其编程到我的模型中?

这是我当前的 Trip 类代码:

class Trip(models.Model):
destination = models.CharField(max_length=55)
description = models.TextField()
start_date = models.DateTimeField(??)
end_date = models.DateTimeField(??)

travellers = models.ManyToManyField(User, related_name="trips")

planned_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name="trips_added")

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

谢谢。

更新

感谢你们,我离目标越来越近了。但是,我认为 DateField 中存在一两个问题(我实际上并不需要 DateTimeField),我错过了。这是我在模型中的行程表:

class Trip(models.Model):
destination = models.CharField(max_length=55)
description = models.TextField()
start_date = models.DateField(null=True)
end_date = models.DateField(null=True)

travelers = models.ManyToManyField(User, related_name="trips")

planned_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name="trips_added")

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

objects = TripManager()

同样在模型中,在我的 TripManager 下,我有以下验证方法:

def trip_validation(self, postData):

errors = {}

if len(postData['destination']) < 1:
errors['destination'] = 'You must enter trip destination.'

if len(postData['description']) < 1:
errors['description'] = 'You must enter trip description.'

if len(postData['start_date']) < 1:
errors['start_date'] = 'Please enter a start date for your trip.'
elif not postData['start_date'] > timezone.now():
errors['start_date'] = 'Your trip start date must be in the future.'

if len(postData['end_date']) < 1:
errors['end_date'] = 'Please enter an end date for your trip.'
elif not self.end_date > self.start_date:
errors['end_date'] = 'Trip end date must be after start date.'

return errors

在 View 中,我调用 trip_validation 方法并通过上下文字典将错误发送到模板。

所有验证方法都有效保存 elif not postData['start_date'] > timezone.now():elif not self.end_date > self.start_date: .

我收到以下错误:TypeError at/trips/add/
无法将 datetime.datetime 与 unicode 进行比较

这让我相信我没有正确使用内置的 DateField 函数。

谢谢。

最佳答案

我更喜欢将这些字段设置为 blank=Truenull=True 并进行一些验证检查通过覆盖 Trip 模型的 save() 方法,作为

from django.utils import timezone
from django.core.exceptions import ValidationError


class Trip(models.Model):
# your fields
start_date = models.DateTimeField(<b>blank=True, null=True</b>)
end_date = models.DateTimeField(<b>blank=True, null=True</b>)

# your fields

<b>def save(self, *args, **kwargs):
if self.start_date:
if not self.start_date > timezone.now():
raise ValidationError("start_time must be greater than current time")
if self.end_date:
if not self.start_date:
raise ValidationError("start time missing. Please check the data")
if not self.end_date > self.start_date:
raise ValidationError("end time must be greater than start time")
super().save(*args, **kwargs)</b>

关于python - Django 1 模型 - DateTimeField(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51936447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com