Я не вижу в ForeignKey результат json. - PullRequest
6 голосов
/ 03 августа 2011

Я недавно начал использовать tastypie, чтобы открыть свой API для потенциального приложения для смартфона.

Я использую Python-2.7 и Django-1.1.2

Меня смущают две вещи

1: в классе EntryResource при вызове ForeignKey они просто вызывают ресурс вместе с resource_name, когда я делаю это таким образом, я получаю следующую трассировку.

691. assert isinstance(to, basestring), "%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)

Exception Type: AssertionError at /api/v1/activity-stream-item-subject/
Exception Value: ForeignKey(<class 'api.resources.UserResource'>) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self'

2: если я изменю EntryResource на user = fields.ForeignKey(UserResource, 'user'), то все работает нормально без обратной трассировки, однако я не вижу соответствующей информации в ответе JSON.

api /resources.py

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        excludes = ['email', 'password', 'is_active', 'is_staff', 'is_superuser']
        filtering = {
            'username': ALL,
        }

class EntryResource(ModelResource):
    user = fields.ForeignKey(UserResource, 'user')

    class Meta:
        queryset = Entry.objects.all()
        resource_name = 'entry'
        authorization = Authorization()
        filtering = {
            'user': ALL_WITH_RELATIONS,
            'pub_date': ['exact', 'lt', 'lte', 'gte', 'gt'],
        } 

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 10 августа 2011

Я не уверен, что понимаю вашу первую проблему, но насчет второй, вам нужно указать, что вы хотите использовать полный ресурс, используя:

user = fields.ForeignKey(UserResource, 'user',full=True)

в противном случае вы получите URI ресурса вместо содержимого. ( Ref )

Также просто для справки, имейте в виду, что требования состояния:

Django 1.2+ (может работать на Django 1.1)

0 голосов
/ 28 марта 2012

Если вы хотите отобразить все поля пользователя в результате json, вы должны установить full=True.

user = fields.ForeignKey(UserResource,user,full=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...