2017-01-08 8 views
0

ご理解ください。 REST APIを使用したdjangoアプリケーションがあります。すべて動作しますが、私はclient_idでフィルタを追加したいと思います。ここで問題が発生しました。Djangoのフィルタに関する問題

エラーメッセージ

invalid literal for int() with base 10: 'B123456' 

があり、必ずこれが私のコードです

api.py

class DatabaseByClientList(RetrieveUpdateDestroyAPIView): 
     serializer_class = DatabaseSerializer 

     def get_queryset(self): 
      client_id = self.kwargs['client_id'] 
      return Database.objects.filter(client_id=client_id) 

models.py

class Database(models.Model): 
    def __unicode__(self): 
     return unicode(self.id) 

    class Meta: 
     ordering = ['db_name'] 

    client_id = models.ForeignKey(ClientInfo) 
    db_name = models.CharField(max_length=30, blank=True) 
    db_host = models.CharField(max_length=30, blank=True) 
    db_user = models.CharField(max_length=30, blank=True) 
    db_pass = models.CharField(max_length=30, blank=True) 
    db_type = models.CharField(max_length=30, blank=True) 

serializer.py

class DatabaseSerializer(serializers.ModelSerializer): 

    client_id = serializers.SlugRelatedField(queryset=ClientInfo.objects.all(), 
              slug_field='access_id') 

    class Meta: 
     model = Database 
     fields = ('id', 'client_id', 'db_name', 'db_host', 'db_user', 'db_pass', 'db_type') 

何が問題なのですか。私はオフドキュメンテーションのようにすべてを作った。 おかげで、私は

return Database.objects.filter(client_id=client_id) 

を試みたが、それはまた

追加CLIENTINFOクラス

class ClientInfo(models.Model): 

    def __str__(self): 
     return self.access_id 

    class Meta: 
     ordering = ['id'] 

    access_id = models.CharField(max_length=15, unique=True, blank=True) 
    username = models.CharField(max_length=15, unique=True, blank=True) 
    password = models.CharField(max_length=15, unique=True, blank=True) 
    name = models.CharField(max_length=15, unique=True, blank=True) 
+0

あなたは 'ClientInfo'クラスを表示できますか? –

+0

Self.kwargs ['client_id']、あなたにB123456を教えてください?フィルタにIDとIDを渡す必要があるためです。そして、このIDはintである必要があります。そしてint( 'B123456')はこのエラーを発生させます。 – Wilfried

+0

モデルに 'name'フィールドはありません。 'filter by name'は何を意味しますか? – 2ps

答えて

0

を助けるdoesntの PSは方法をこのようにget_queryset上書きしてみてください。

class DatabaseByClientList(...): 
    model = Database 
    serializer_class = DatabaseSerializer 

    def get_queryset(self): 
     qs = super(DatabaseByClientList, self).get_queryset() 
     qs.filter(client_id=self.kwargs['client_id']) 
     return qs 
+0

を使用しています。残念ながらこの場合、私はエラー " 'DatabaseByClientList'に' queryset'属性を含めるか、 'get_queryset()'メソッドをオーバーライドする必要があります。 – azazasovich

関連する問題