2014-01-15 2 views
2

У меня есть некоторые Tastypie ресурсы, которые делают что-то вроде этого, когда называют:Джанго Tastypie use_in с отношениями

{ 
    "meta":{ 
     "limit":1, 
     "next":"/api/v1/studio/?limit=1&offset=1", 
     "offset":0, 
     "previous":null, 
     "total_count":93 
    }, 
    "objects":[ 
     { 
     "full_address":"1234 Main St.", 
     "resource_uri":"/api/v1/studio/3/", 
     "state":{ 
      "resource_uri":"/api/v1/state/110/", 
      "state_id":110, 
      "state_name":"Colorado", 
      "studios":[ 
       "/api/v1/studio/3/", 
       "/api/v1/studio/4/", 
       "/api/v1/studio/5/", 
       "/api/v1/studio/6/", 
       "/api/v1/studio/8/", 
       "/api/v1/studio/11/", 
       "/api/v1/studio/12/", 
       "/api/v1/studio/13/", 
       "/api/v1/studio/14/", 
       "/api/v1/studio/15/", 
       "/api/v1/studio/1/", 
       "/api/v1/studio/2/" 
      ] 
     } 
     } 
    ] 
} 

Могу ли я использовать use_in с Tastypie, чтобы исключить связанные поля из представления списка? Я могу исключить поле непосредственного ресурса, подобного этому:

exclude_this_field = fields.CharField(use_in='detail', attribute='exclude_this_field') 

Состояние - это поле ForeignKey для Studio. Как исключить связанный ресурс?

studios = fields.Charfield(use_in='detail', attribute='state__state_id') 

Могу ли я сделать что-то подобное этой работе, чтобы исключить родственный ресурс?

+0

Связанные поля не отображаются по умолчанию. Вам нужно отделить поле к ресурсу, чтобы отобразить его. Можете ли вы показать свои ресурсы для штата и студии? Это –

+0

Как вы решили это? – marcelosalloum

ответ

0

Если вы хотите скрыть ForeignKeyField в деталях или список, переопределите функцию init вашего ресурса и добавьте значение use_in после вызова объекта parent init. Это должно выглядеть так:

class YourResource(ModelResource) 
    ... 
    class Meta: 
     ... 
    def __init__(self, *args, **kwargs): 
     # Call the object's parent, which will set up and populate 
     # the Resource fields from the queryset provided 
     super(YourResource, self).__init__(*args, **kwargs) 
     # Now loop through the fields of the resource, and when we 
     # find the one we only want to be shown in the detail view, 
     # set its use_in attr appropriately 
     for field_name, field_object in self.fields.items(): 
      if field_name == 'yourForeignFieldName': 
       field_object.use_in = 'detail' 

Надеюсь, это поможет, ура!

Смежные вопросы