2017-07-05 13 views
1

DJANGO REST APIのユーザー設定ビューセットで作業しています。このユーザーは、環境設定の更新とともに環境設定のリストを取得できます。郵便局で私はユーザーの好みを得ることができますが、私は 'put'に行くときに私は次のエラーが発生しています:整合性エラー--NOT NULL制約が失敗しました:pugorugh_userpref.age - これは起こっているかもしれない理由? DJANGO REST API:NULLではありません制約は失敗しました

ユーザー設定モデル

は以下の通りです:

class UserPrefSerializer(serializers.ModelSerializer): 
    extra_kwargs = { 
     'user': {'write_only': True} 
    } 

    class Meta: 
     fields = (
      'age', 
      'gender', 
      'size' 
     ) 
     model = models.UserPref 

答えて

1

age値が含まれているdoesntのPUTデータのように見える

class UserPrefViewSet(
    mixins.RetrieveModelMixin, 
    mixins.UpdateModelMixin, 
    viewsets.GenericViewSet): 
    """View to get and update User Preferences.""" 
    permission_classes = (permissions.IsAuthenticated,) 
    queryset = models.UserPref.objects.all() 
    serializer_class = serializers.UserPrefSerializer 

    # /api/user/preferences/ 
    @list_route(methods=['get', 'put']) 
    def preferences(self, request, pk=None): 
     user = request.user 
     user_pref = models.UserPref.objects.get(user=user) 

     if request.method == 'PUT': 
      data = request.data 
      user_pref.age = data.get('age') 
      user_pref.gender = data.get('gender') 
      user_pref.size = data.get('size') 
      user_pref.save() 

     serializer = serializers.UserPrefSerializer(user_pref) 
     return Response(serializer.data) 

シリアライザ:

class UserPref(models.Model): 
    user = models.ForeignKey(User) 
    age = models.CharField(choices=AGE, max_length=7, default='b,y,a,s') 
    gender = models.CharField(choices=GENDER_PREF, max_length=3, default='m,f') 
    size = models.CharField(choices=SIZE_PREF, max_length=8, default='s,m,l,xl') 

    def __str__(self): 
     return '{} preferences'.format(self.user) 


def create_user_preference(sender, **kwargs): 
    user = kwargs['instance'] 

    if kwargs['created']: 
     user_pref = UserPref(user=user) 
     user_pref.save() 

post_save.connect(create_user_preference, sender=User) 

は、ここに私のビューセットです。 ageフィールドはnullableではないので、空白の年齢値はエラーを発生させます。 この問題を解決するために試してみてください。

user_pref.age = data.get('age') or user_pref.age 
... 
user_pref.save() 

これは価値はない場合、要求データにageを変更しないことができます。

+1

私はそのトリックをやったと思う。親切に感謝します。 –

関連する問題