Python DRF无效的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

我想通过Django Rest框架中的POST请求,通过接收当前时间来设置DateTimeField值,而不是在
的“活动日期从”和“活动日期到”字段中设置我的值

我用身体发出了邮寄请求

{
    "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只是忽略了
自动添加
字段的给定值


在文档中,还有一节描述了如何在创建对象时提供“可覆盖值”。

您必须设置时区我有这些配置(更新的问题)您必须设置时区我有这些配置(更新的问题)