如何在Django中映射对象?
问题描述:
假设我在我的POST方法中有三个字段 - field1
,field2
,field3
但是在POST方法field2
和field3
在添加到数据库期间应该具有相同的值。因此不需要手动添加例如field2=2
,field3=2
。我只能添加field1=1
,field2=2
,然后field3=2
将自动添加到本体中,最后将整个3个字段添加到数据库中。我想知道应该如何以最优化的方式来完成?是否应该在视野内完成?我尝试以下面的方式。如何在Django中映射对象?
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__')
答
可能是你可以用简单的逻辑,从后串行排除field3
,并将它放在模型
save
方法
in serializer:
class ObjectPostSerializer(serializers.ModelSerializer):
class Meta:
model=Object
exclude = ('field3',)
在车型:
class Object(model.Model):
# YOU FIELDS DECLARE HERE
def save(self, *args, **kwargs):
if not self.pk:
self.field3 = self.field2
super(Object, self).save(*args, **kwargs)
如果'field2'和'field3'将永远在数据库中的值相同,为什么这两个领域需要的?难道你不能废除其中一个吗?但是要回答这个问题,一个好的方法是编写serializer.save(),这样它就会忽略field3的值,并为两个数据库列使用field2的值。 –
@JohnGordon由于将来只有field2会更新,field3意味着初始值。你可以看看更新的问题中的代码吗?我该如何解决它? – wahtdbogh
我对Django对象序列化程序没有任何经验,所以我不能评论具体细节,但似乎你有正确的想法。 –