2017-03-05 104 views
0

我得到張貼,同時一組不爲空contraint失敗的錯誤。我應該如何解決它?我不想在api中顯示用戶,所以我沒有在序列化程序字段中使用它。我必須在那裏強制添加它嗎?失敗NOT NULL約束:device_api_devicegroup.owner_id

這裏是我的模型,串行和APIView

class DeviceGroup(models.Model): 
    token = models.UUIDField(default=uuid.uuid4, unique=True, editable=False) 
    name = models.CharField(max_length=250, blank=False, null=False) 
    owner = models.ForeignKey(User, blank=False, null=False) 


class DeviceGroupSerializer(serializers.ModelSerializer): 
    id = serializers.UUIDField(source='token', format='hex', read_only=True) 
    class Meta: 
     model = DeviceGroup 
     fields = ['id','name'] 


class DevicesGroupsAPIView(APIView): 
    permission_classes = (permissions.IsAuthenticated,) 
    serializer_class = DeviceGroupSerializer 

    def get_object(self, user, token): 
     try: 
      return BaseDevice.objects.filter(owner=user).get(token=token) 
     except ObjectDoesNotExist: 
      return error.RequestedResourceNotFound().as_response() 

    def get(self, request, format=None): 
     """ 
      Returns a list of groups 
     """ 
     reply = {} 
     try: 
      groups = DeviceGroup.objects.filter(owner=request.user) 
      reply['data'] = DeviceGroupSerializer(groups, many=True).data 
     except: 
      reply['data'] = [] 
     return Response(reply, status.HTTP_200_OK) 

    def post(self, request, format=None): 
     """ 
     create a new group 
     """ 
     print('request.data', request.data) 
     print('user', request.user) 
     serializer = DeviceGroupSerializer(data=request.data) 
     print('serializer', serializer) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializers.data, status.HTTP_200_OK) 
     return Response(serializer.errors, status.HTTP_204_NO_CONTENT) 
+0

應該採取什麼'owner'被設定爲如果從API省略? –

+0

我只是不想讓所有者出現在列表視圖中。對於發佈,它應該知道哪個用戶發佈了,因爲我正在基於其所有者過濾這些組。 – pythonBeginner

回答

1

看到這樣認真,用戶是不是在request.data:

serializer = DeviceGroupSerializer(data={ 
    'name':request.data['name'], 
    'owner':request.user.id, 
}) 

還檢查串行允許所有者使用

from django.contrib.auth.models import User 

class DeviceGroupSerializer(serializers.ModelSerializer): 
    id = serializers.UUIDField(source='token', format='hex', read_only=True) 
    owner = serializers.PrimaryKeyRelatedField(queryset=User.objects.all()) 
    class Meta: 
     model = DeviceGroup 
     fields = ['id','name', 'owner'] 
+0

我在/ api/v1/device_groups上得到MultiValueDictKeyError 「'token'」error – pythonBeginner

+0

request.data has request.data pythonBeginner

+0

這意味着你沒有從前端發送id和token字段,我知道你需要這兩個嗎?另外,根據需要修改代碼。我的本意是,你要注意,你在哪裏得到(request.data VS request.user) – jperelli

相關問題