这是MODEL:
class Device (models.Model):
name = models.CharField(max_length = 30)
device_id = models.CharField(max_length = 100, unique = True)
organization = models.ForeignKey(Organization)
这是SERIALIZER:
class DeviceSerializer(serializers.ModelSerializer):
class Meta:
model = Device
fields = ['id','device_id', 'organization']
def create(self,validated_data):
validated_data.__setitem__('name', names.get_full_name())
return Device.objects.create(**validated_data)
这是API:
class DeviceAPI(APIView):
def post(self,request,format=None):
serializer = DeviceSerializer(data = request.data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data , status = 201)
return JSONResponse(serializer.errors, status = 400)
def get(self,request,format=None):
# --------------------------------- #
# ---- WHAT to write here ??? ----- #
# --------------------------------- #
return JSONResponse(serializer.data, status = 200)
我想要这个:
if method.request == POST:
pass # get post data and create new device // it's work
if method.request == GET:
pass # receive data (device_id) and if it's exists then send it's id
我可以只使用一个串行器吗?或者我应该写第二个(对于一个方法 - 一个串行器)
谢谢! ! !
答案 0 :(得分:0)
执行此操作的最佳方法是只使用一个序列化程序,但要确保它具有正确的注释,以便哪些字段是只读的,哪些字段是可读写的。
如果您使用的是简单的ModelSerializer,它将如下所示:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [ 'username', 'first_name', 'last_name', 'email' ]
read_only_fields = [ 'username' ]
这会创建一个序列化程序,输出fields
参数中列出的四个字段,但只有最后三个字段可以使用序列化程序进行编辑。
然后只需使用ModelViewSet
(或其他一些ViewSet
),让REST Framework为您构建所有方法,而不是手动编写所有方法。
在某些情况下,您需要一个不同的序列化程序来创建用户(因为用户需要在首次创建帐户时选择用户名)...为此,您可以使用Django REST Framework show multiple forms on HTML view处的示例