2016-08-07 8 views
0

は、だから私は返すが、エラーメッセージを受信し続けるために、オーストラリアのみブランドとブランドをフィルタリングするapi/v1/labels/?brand_location=Australiaとしての私の場所のフィルタのURLを持ってしようとしています:無効なリソース・ルックアップ・データ

{"error": "Invalid resource lookup data provided (mismatched type)."} 

しかし使用api/v1/labels/?brand_location/=Australiaそれは動作しますが、オーストラリアのみの場所をフィルタリングしますが、場所を除外しない完全な応答を返します。

だから私の質問は以下のとおりです。

  1. どのように私は最後のスラッシュを削除することができますか?オーストラリアのみの場所をフィルタリングすることができます
  2. これは正しい方法ですか? django tastypieで外部キーを使用する場合

以下の私のコード:

Models.py

class Brand(models.Model): 

    brand_location = models.ForeignKey('Location', null=True, blank=True, default="") 


class Location(models.Model): 

    state_or_country = models.CharField(unique=True, max_length=200, blank=True, default="", verbose_name=_('Location'), 

api.py

class LocationResource(ModelResource): 
    class Meta: 
     excludes = ['modified', 'id', 'created'] 

     queryset = Location.objects.all() 

     resource_name = 'locations' 

class LabelResource(ModelResource): 

    brand_location = fields.ForeignKey(LocationResource, 'brand_location', full=True) 

    class Meta: 

     filtering = { 
      "brand_location": ALL 
     } 

     queryset = Brand.objects.all() 

     resource_name = 'labels' 

スニペットJSONレスポンス

{ 
    "labels": [ 
    { 
     "brand_location": { 
     "state_or_country": "Australia" 
     } 
    } 
    ], 
    "meta": { 
    "limit": 6, 
    "next": "/unlabel-network/unlabel-network-api/v1/labels/?limit=6&brand_location%2F=Australia&offset=6", 
    "offset": 0, 
    "previous": null, 
    "total_count": 128 
    } 
} 

答えて

0

api/v1/labels/?brand_location=Australiaは、Location.id=Australiaを探します。

深いフィルタリング許可:

filtering = { 
    "brand_location": ALL_WITH_RELATIONS 
} 

state_or_countryフィールドを探します。

api/v1/labels/?brand_location__state_or_country=Australia 
+0

これは新しいエラーあなたが上記のURLを使用したときにエラーが発生します:{"error": "'brand_location'フィールドに2つ以上のレベルの検索が許可されていません。 – Amechi

0

を私はちょうど私のLocationResourcefilteringを追加するために必要なその後、私のLabelResource

に私のフィルタリング辞書に ALL_WITH_RELATIONSを追加
class LocationResource(ModelResource): 
    class Meta: 
     excludes = ['modified', 'id', 'created'] 

     queryset = Location.objects.all() 

     resource_name = 'locations' 

     filtering = { 
      "state_or_country": ALL 
     } 

class LabelResource(ModelResource): 

    brand_location = fields.ForeignKey(LocationResource, 'brand_location', full=True) 

    class Meta: 

     filtering = { 
      "brand_location": ALL, 
      "brand_location": ALL_WITH_RELATIONS 
     } 

     queryset = Brand.objects.all() 

     resource_name = 'labels' 
関連する問題