Добавление TastyPie ModelResource в другой ModelResource, связанный отношением Django OneToOne

У меня есть две модели django, которые связаны отношением OneToOne, и мне трудно понять, как их подключить в Tastypie ModelResource.

Вместо публикации некоторых новых моделей я позаимствую модели, определенные в , включая дочерние ресурсы. в Django Tastypie API, чтобы показать, где я не понимаю, как это сделать. Используя модели Ticket и TicketComment, представьте, что TicketComment была такой:

class TicketComment(models.Model):
    ticket = models.OneToOneField('Ticket')

вместо использования поля ForeignKey. Я видел документы, а также сообщения, подобные приведенным выше, в которых используются ToManyField и ToOneField. Но это не работает в моей ситуации, так как Ticket не ссылается на TicketComment. Что я хочу сделать, так это иметь возможность создать API, который перечисляет TicketComment в Ticket. Tastypie правильно выдает исключение, говоря, что поля TicketComment не существуют в модели Ticket. Есть ли способ получить красивый сериализованный TicketComment в Ticket API?


person Randy    schedule 01.02.2012    source источник


Ответы (1)


Существует аргумент attribute, который сообщает deliciouspie, какое поле следует использовать. . Билет ссылается на TicketComment по обратной связи. По умолчанию это будет имя модели в нижнем регистре, поэтому в вашем примере это будет ticketcomment. Но я рекомендую вам установить related_name в вашей модели явно, чтобы вы знали, как это будет связано.

Итак, в вашем вкусном пироге вы должны сделать это:

class TicketResource(ModelResource):
   comment = fields.OneToOneField('TicketCommentResource', 'ticketcomment')

И это будет работать нормально. Второй аргумент в OneToOneField — это атрибут.

person Aldarund    schedule 01.02.2012
comment
это работает для меня: comment = fields.OneToOneField('TicketCommentResource', 'ticketcomment') Это то, что вы имели в виду? - person Randy; 03.02.2012
comment
и для сериализации TicketComment внутри Ticket используйте OneToOneField('TicketCommentResource', 'ticketcomment', full=True) - person zackdever; 03.02.2012
comment
У меня это не получается при POST со следующей ошибкой - в hydr\n value = super(ToOneField, self).hydr(bundle)\n\n File \/Library/Python/2.7/site-packages/tastypie/fields.py\ , строка 154, в гидрате\n elif self.attribute и getattr(bundle.obj, self.attribute, None):\n\n File \/Library/Python/2.7/site-packages/Django-1.4.1-py2 .7.egg/django/db/models/fields/related.py\, строка 343, в __get__\n поднять self.field.rel.to.DoesNotExist\n\nDoesNotExist\n} Вы пытались выполнить POST или GET? - person Mutant; 13.10.2012