[英]How can I map objects in Django?
假设我在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__')
可能是您可以使用简单的逻辑,从后序列化程序中排除field3
,然后将其设置为模型的save
方法
在序列化器中:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.