尽管我在开始时间之前提供了预约,但仍在登记预约。
- 型号. py**
class Appointment(models.Model):
status = models.CharField(
choices=APPOINMENT_STATUSES,
max_length=20,
default=SCHEDULED,
help_text="",
)
full_name = models.CharField(max_length=100)
gender = models.CharField(choices=GENDER_TYPE, max_length=10, default=MALE)
email = models.EmailField()
phone_no = models.CharField(max_length=10, validators=[validate_phone_no])
start = models.DateTimeField(max_length=50, help_text="Appointment start Date & Time")
end = models.DateTimeField(max_length=50, help_text="Appointment End Date & Time")
doctor = models.ForeignKey(Doctor, on_delete=models.PROTECT, blank=True, null=True)
message = models.TextField()
def __str__(self):
return self.full_name
- 序列化程序. py**
class AppointmentCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Appointment
fields = '__all__'
def create(self, validated_data):
return super().create(validated_data)
def validate(self, attrs):
# check appointment start and end time
if attrs["start"] < timezone.now():
raise serializers.ValidationError("Appointment date cannot be in the past")
if attrs["start"] >= attrs["end"]:
raise serializers.ValidationError(
f"Appointment end date/time should be after than start/date time."
)
return super().validate(attrs)
- 说明:**
这是我的约会模型和序列化器。为什么我的验证不起作用。
我想,用户将无法创建约会,如果 * 开始 * 日期和时间是在当前日期和时间之前。---------------〉但约会正在注册,如果用户输入今天的日期,但之前的时间。
- 这有什么错?什么可以更好地解决这个问题?*
1条答案
按热度按时间omhiaaxx1#
我认为您的验证工作正常。您没有看到它的原因可能是时区。假设您在设置中有timezone =“UTC”,现在是当地时间18:00和UTC标准时间11:00(相差7小时)。如果您在请求中发送“start”而没有时区指示,例如2022-12- 27 T17:00,那么服务器将认为是UTC标准时间17:00,因此17:00晚于11:00。
我尝试发送开始日期与指示的小时数从utc和看看它是否工作。在我的例子中,它将是2022-12- 27 T17:00:00+07:00,所以服务器应该将它转换为10:00在utc(或其他时区,您正在使用的设置)什么是早于11:00