【发布时间】:2017-10-28 18:42:15
【问题描述】:
假设我在我的 POST 方法中有三个字段 - field1、field2、field3 但是在 POST 方法中 field2 和 field3 在添加到数据库期间应该具有相同的值。因此,无需手动添加 field2=2、field3=2。我只能添加field1=1、field2=2,然后field3=2 将自动添加到此正文中,最后整个 3 个字段将添加到数据库中。我想知道它应该如何以最佳方式完成?是否应该在视图中完成?我尝试如下所示的方式。
views.py:
class UserObject(GenericAPIView):
def get_serializer_class(self, *args, **kwargs):
if self.request.method == 'POST':
return ObjectPostSerializer
return ObjectSerializer
def post(self, request, user_id):
serializer = ObjectPostSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user_id=user_id)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py:
class ObjectPostSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(ObjectPostSerializer, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields['field3'].required = False
class Meta:
model=Object
field3 = model.field2
fields = ('__all__')
【问题讨论】:
-
如果
field2和field3在数据库中始终具有相同的值,为什么需要这两个字段?你不能取消其中一个吗?但要回答这个问题,一个好的方法是编写serializer.save(),这样它会忽略field3的值,并为两个数据库列使用field2的值。 -
@JohnGordon 因为将来只有 field2 会更新,所以 field3 表示初始值。您可以查看更新问题中的代码吗?我该如何解决?
-
我对 Django 对象序列化器没有任何经验,所以我无法评论具体细节,但看起来你的想法是正确的。
-
@JohnGordon 但是 field3 没有添加到数据库中。
标签: python django python-3.x django-rest-framework django-views