如何在 Django REST Framework HTML 表单中自动设置 DateTime 字段的值?
Posted
技术标签:
【中文标题】如何在 Django REST Framework HTML 表单中自动设置 DateTime 字段的值?【英文标题】:How to set value of DateTime field automatically in Django REST Framework HTML form? 【发布时间】:2021-09-03 06:24:53 【问题描述】:我有一个非常基本的 Django 模型,并在 Django REST 框架中使用它。
当使用可浏览 API 工具并请求资源实例时,我可以使用页面底部的 html 表单设置不同属性的值。除 DateTime 字段外,所有属性都预设了当前值。是否需要特殊设置,以便日期时间条目字段的表单字段预填充其当前值?
模型类:
class C(models.Model):
OrderDate = models.DateTimeField(auto_now=False)
p1 = models.ForeignKey(PA, related_name="cs", on_delete=models.CASCADE, null=True)
p2 = models.ForeignKey(PB, related_name="cs", on_delete=models.DO_NOTHING, null=True)
class Meta:
ordering = ['OrderDate']
查看:
class CViewSet(viewsets.ModelViewSet):
queryset = C.objects.all().order_by('-OrderDate')
serializer_class = CSerializer
def get_queryset(self):
cs = C.objects.all()
# Some filters...
return cs
序列化器:
class CSerializer(serializers.HyperlinkedModelSerializer):
p1 = PASerializer(many=False, read_only=True)
p2 = PBSerializer(many=False, read_only=True)
class Meta:
model = C
fields = (
'id',
'OrderDate',
'p1',
'p2',
)
我试图概括代码希望大体思路清晰。
我希望OrderDate
字段在显示可浏览 API 中的 HTML 表单时预先填充当前值。
【问题讨论】:
请将您的模型、序列化程序和视图添加到您的问题中 【参考方案1】:在 DateTimeField 中有 2 个选项,添加 default 值或使用 auto_now_add。
在你的情况下你已经设置了auto_now,并且根据this question
auto_now - 每次调用 Model.save() 时,将字段的值更新为当前时间和日期。
auto_now_add - 使用记录创建的时间和日期更新值。
所以你有这两种可能性:
OrderDate = models.DateTimeField(default=datetime.now)
或
OrderDate = models.DateTimeField(auto_now_add=True)
如果您想在用户提交表单时自动添加当前时间而不在您的 HTML 中显示它,这是可行的,如果您想在 html 字段(您的表单)中显示当前日期和时间,那么您必须使用 javascript 和 HTML 在前端设置它
Use: <input type="datetime-local">
【讨论】:
谢谢,使用auto_date_add
很好。但是,我最初的问题是我希望在可浏览的 API HTML 表单中使用当前值填充 DateTime 表单字段。如果你知道这是怎么可能的,那就太好了。你的前端想法不是我的意思。【参考方案2】:
我是 django drf 的新手,遇到了同样的问题,这解决了。 (DATETIME_FORMAT
在settings.py
)
我的猜测是因为在渲染 html 时,它使用的格式与 DRF 使用的格式不同
REST_FRAMEWORK =
'DEFAULT_PAGINATION_CLASS':
'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'DATETIME_FORMAT' : '%Y-%m-%dT%H:%M',
【讨论】:
以上是关于如何在 Django REST Framework HTML 表单中自动设置 DateTime 字段的值?的主要内容,如果未能解决你的问题,请参考以下文章
Django.rest_framework:如何序列化一对多?
如何使用 TemplateHTMLRenderer 在 Django-REST-Framework 中创建/放置?
django-rest-framework:如何序列化已经包含 JSON 的字段?
如何在 Django Rest Framework 中散列 Django 用户密码?