如何根据之前字段的选择自动生成字段
How to automatically generate a field based on the choice of a previous field
我在 Django Rest Framework 中有一个模型和一些序列化程序。我想对“service_interval”字段进行选择,然后根据他们的选择在数据库中正确生成日期。我该怎么做?
这是我的代码。
class Snippet(VIPSnippet):
title = models.CharField(max_length=100, blank=True, default='')
service_interval_choices = [
(3, '3 Months'),
(6 , '6 Months'),
(9, '9 Months'),
(12, '1 Year'),
]
service_interval = models.IntegerField(choices=service_interval_choices)
next_service = models.DateTimeField()
序列化器
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', format='html')
class Meta:
model = Snippet
fields = ['url', 'service_interval']
next_service = datetime.datetime.now() + datetime.timedelta(3*365/12)
当我这样做时,出现以下错误
NOT NULL constraint failed: snippets_snippet.next_service
我计划用 service_interval 或我需要的任何变量替换 datetime.timedelta(3*365/12) 中的“3”,以便它生成日期,但可能在未来几个月根据需要。
您可以通过覆盖 the serializer's validate
-method:
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', format='html')
def validate(self, data):
data["next_service"] = datetime.datetime.now() + datetime.timedelta(data["service_interval"]*365/12)
return data
class Meta:
model = Snippet
fields = [
'url',
'service_interval',
'next_service',
# also you need to include the fields defined on the serializer here:
'owner',
'highlight',
]
我在 Django Rest Framework 中有一个模型和一些序列化程序。我想对“service_interval”字段进行选择,然后根据他们的选择在数据库中正确生成日期。我该怎么做?
这是我的代码。
class Snippet(VIPSnippet):
title = models.CharField(max_length=100, blank=True, default='')
service_interval_choices = [
(3, '3 Months'),
(6 , '6 Months'),
(9, '9 Months'),
(12, '1 Year'),
]
service_interval = models.IntegerField(choices=service_interval_choices)
next_service = models.DateTimeField()
序列化器
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', format='html')
class Meta:
model = Snippet
fields = ['url', 'service_interval']
next_service = datetime.datetime.now() + datetime.timedelta(3*365/12)
当我这样做时,出现以下错误
NOT NULL constraint failed: snippets_snippet.next_service
我计划用 service_interval 或我需要的任何变量替换 datetime.timedelta(3*365/12) 中的“3”,以便它生成日期,但可能在未来几个月根据需要。
您可以通过覆盖 the serializer's validate
-method:
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', format='html')
def validate(self, data):
data["next_service"] = datetime.datetime.now() + datetime.timedelta(data["service_interval"]*365/12)
return data
class Meta:
model = Snippet
fields = [
'url',
'service_interval',
'next_service',
# also you need to include the fields defined on the serializer here:
'owner',
'highlight',
]