Python DRF无效的DateTimeField值
我想通过Django Rest框架中的POST请求,通过接收当前时间来设置DateTimeField值,而不是在Python DRF无效的DateTimeField值,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想通过Django Rest框架中的POST请求,通过接收当前时间来设置DateTimeField值,而不是在的“活动日期从”和“活动日期到”字段中设置我的值 我用身体发出了邮寄请求 { "title": "myTitle", "tag": 7, "created_at": "2021-05-09 17:32:18", "active_date_from
的“活动日期从”和“活动日期到”字段中设置我的值
我用身体发出了邮寄请求
{
"title": "myTitle",
"tag": 7,
"created_at": "2021-05-09 17:32:18",
"active_date_from": "2020-01-01 00:00:11",
"active_date_to": "2020-01-01 11:11:11"
}
但接受
{
"result": {
"id": 32,
"title": "myTitle",
"image": null,
"description": "",
"tag": 7,
"tag_name": "124",
"created_at": "2021-05-09 17:55:45",
"active_date_from": "2021-05-09 17:55:45",
"active_date_to": "2021-05-09 17:55:45"
},
}
我的密码。在模型中,我正在设置默认值auto\u now\u add=True,但我希望可以在post方法中设置这些字段
#My configs
TIME_ZONE = "Europe/Moscow"
DATETIME_FORMAT = ("%Y-%m-%d %H:%M:%S",)
USE_I18N = True
USE_L10N = False
USE_TZ = True
型号.py
class News(models.Model):
title = models.CharField(max_length=255)
image = models.ImageField(
upload_to=image_directory_path, blank=True, null=True
)
short_description = models.CharField(max_length=255)
description = models.TextField()
tag = models.ForeignKey(
NewsTag,
related_name="product_tag",
on_delete=models.SET_NULL,
null=True,
)
created_at = models.DateTimeField(auto_now_add=True)
active_date_from = models.DateTimeField(auto_now_add=True)
active_date_to = models.DateTimeField(auto_now_add=True)
class DashboardNewsSerializer(serializers.ModelSerializer):
title = serializers.CharField(required=False)
image = serializers.ImageField(required=False)
description = serializers.CharField(required=False)
created_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
active_date_from = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
active_date_to = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
tag = PrimaryKeyRelatedField(queryset=NewsTag.objects.all(), many=False)
tag_name = serializers.SerializerMethodField()
class Meta:
model = News
fields = (
"id",
"title",
"image",
"description",
"tag",
"tag_name",
"created_at",
"active_date_from",
"active_date_to",
)
class DashboardNewsViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticatedManager,)
serializer_class = DashboardNewsSerializer
queryset = News.objects.all()
search_fields = ("title",)
filter_backends = [
drf_filters.SearchFilter,
drf_filters.OrderingFilter,
]
ordering_fields = "__all__"
def get_serializer_class(self):
return DashboardNewsSerializer
def get_queryset(self):
queryset = super().get_queryset()
tag = self.request.GET.get("tag")
if tag:
return queryset.filter(tag__name__icontains=tag.lower())
return queryset
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
response = {"result": serializer.data}
return Response(
response, status=status.HTTP_201_CREATED, headers=headers
)
序列化程序.py
class News(models.Model):
title = models.CharField(max_length=255)
image = models.ImageField(
upload_to=image_directory_path, blank=True, null=True
)
short_description = models.CharField(max_length=255)
description = models.TextField()
tag = models.ForeignKey(
NewsTag,
related_name="product_tag",
on_delete=models.SET_NULL,
null=True,
)
created_at = models.DateTimeField(auto_now_add=True)
active_date_from = models.DateTimeField(auto_now_add=True)
active_date_to = models.DateTimeField(auto_now_add=True)
class DashboardNewsSerializer(serializers.ModelSerializer):
title = serializers.CharField(required=False)
image = serializers.ImageField(required=False)
description = serializers.CharField(required=False)
created_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
active_date_from = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
active_date_to = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
tag = PrimaryKeyRelatedField(queryset=NewsTag.objects.all(), many=False)
tag_name = serializers.SerializerMethodField()
class Meta:
model = News
fields = (
"id",
"title",
"image",
"description",
"tag",
"tag_name",
"created_at",
"active_date_from",
"active_date_to",
)
class DashboardNewsViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticatedManager,)
serializer_class = DashboardNewsSerializer
queryset = News.objects.all()
search_fields = ("title",)
filter_backends = [
drf_filters.SearchFilter,
drf_filters.OrderingFilter,
]
ordering_fields = "__all__"
def get_serializer_class(self):
return DashboardNewsSerializer
def get_queryset(self):
queryset = super().get_queryset()
tag = self.request.GET.get("tag")
if tag:
return queryset.filter(tag__name__icontains=tag.lower())
return queryset
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
response = {"result": serializer.data}
return Response(
response, status=status.HTTP_201_CREATED, headers=headers
)
视图.py
class News(models.Model):
title = models.CharField(max_length=255)
image = models.ImageField(
upload_to=image_directory_path, blank=True, null=True
)
short_description = models.CharField(max_length=255)
description = models.TextField()
tag = models.ForeignKey(
NewsTag,
related_name="product_tag",
on_delete=models.SET_NULL,
null=True,
)
created_at = models.DateTimeField(auto_now_add=True)
active_date_from = models.DateTimeField(auto_now_add=True)
active_date_to = models.DateTimeField(auto_now_add=True)
class DashboardNewsSerializer(serializers.ModelSerializer):
title = serializers.CharField(required=False)
image = serializers.ImageField(required=False)
description = serializers.CharField(required=False)
created_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
active_date_from = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
active_date_to = serializers.DateTimeField(format=settings.DATETIME_FORMAT[0])
tag = PrimaryKeyRelatedField(queryset=NewsTag.objects.all(), many=False)
tag_name = serializers.SerializerMethodField()
class Meta:
model = News
fields = (
"id",
"title",
"image",
"description",
"tag",
"tag_name",
"created_at",
"active_date_from",
"active_date_to",
)
class DashboardNewsViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticatedManager,)
serializer_class = DashboardNewsSerializer
queryset = News.objects.all()
search_fields = ("title",)
filter_backends = [
drf_filters.SearchFilter,
drf_filters.OrderingFilter,
]
ordering_fields = "__all__"
def get_serializer_class(self):
return DashboardNewsSerializer
def get_queryset(self):
queryset = super().get_queryset()
tag = self.request.GET.get("tag")
if tag:
return queryset.filter(tag__name__icontains=tag.lower())
return queryset
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
response = {"result": serializer.data}
return Response(
response, status=status.HTTP_201_CREATED, headers=headers
)
从
首次创建对象时自动将字段设置为“现在”。用于创建时间戳。请注意,始终使用当前日期;它不仅仅是一个可以覆盖的默认值因此,即使您在创建对象时为此字段设置了值,它也将被忽略
也就是说,在您的例子中,Django只是忽略了自动添加
字段的给定值
在文档中,还有一节描述了如何在创建对象时提供“可覆盖值”。来自
首次创建对象时自动将字段设置为“现在”。用于创建时间戳。请注意,始终使用当前日期;它不仅仅是一个可以覆盖的默认值因此,即使您在创建对象时为此字段设置了值,它也将被忽略
也就是说,在您的例子中,Django只是忽略了自动添加
字段的给定值
在文档中,还有一节描述了如何在创建对象时提供“可覆盖值”。您必须设置时区我有这些配置(更新的问题)您必须设置时区我有这些配置(更新的问题)