2017-04-06 6 views
0

私はユーザープロファイルクラスを持っており、ユーザーが存在するかどうか、そしてそのユーザーを作成しないかどうかを確認しています。Django rest framework - 例外発生/フィルタリング中に空の結果を処理する

クライアントが呼び出すことができるようにUSERPROFILEのためのフィルタクラスを使用しています:結果が空の場合

http://localhost:8000/users/[email protected]

とは、電子メールアドレスを持つユーザーを作成します。

クエリ結果を傍受し、空のときに例外を発生させてユーザーを作成する方法がありますか。 もし改善の余地があれば修正したいと思う。

class UserQueryFilter(django_filters.rest_framework.FilterSet): 
    email = django_filters.CharFilter(name="user__email") 
    username = django_filters.CharFilter(name="user__username") 

    class Meta: 
     model = UserProfile 
     fields = ['email', 'username'] 


class UserViewSet(viewsets.ReadOnlyModelViewSet): 
    queryset = UserProfile.objects.all() 
    serializer_class = UserSerializer 
    filter_class = UserQueryFilter 

助けてください。アナンド

答えて

0

Djangoの残りのフレームワークは、デフォルトでは無効になっていた機能を提供

感謝。多分それはあなたの問題を解決するためにあなたに別のアプローチを与えることができる:あなたは本当にクエリ文字列でGETリクエストを介してユーザーを作成する必要がある場合は、一方でPUT as create

を、あなたは例えば、ジャンゴ・フィルタからMethodFilterを使用することができます。

class UserFilters(FilterSet): 
    user = MethodFilter(action='filter_user') 

    class Meta: 
     model = User 
     fields = ['user'] 

    def filter_user(self, queryset, value): 
     if not value: 
      # Here Raise Exception 
     else: 
      # Check if the user exists, if not create it 
      users = queryset.filter(Q(username=value) | Q(email=value)) 
      if not users.exists: 
       user = User.objects.create(...) 
       return queryset.filter(pk=user.id) 
      else: 
       return users 

ご希望の場合は、こちらをご覧ください。私はそれが正確な方法で動作するかどうかははっきりしていませんが、それはアイデアです。

個人的には、POSTやPUTのようなより適切な要求によってそのタスクを実行し、対応する方法で管理することをお勧めします。

関連する問題