【问题标题】:Adding a TastyPie ModelResource to another ModelResource connected by a Django OneToOne Relationship将 TastyPie ModelResource 添加到由 Django OneToOne 关系连接的另一个 ModelResource
【发布时间】:2023-03-28 19:25:01
【问题描述】:

我有两个通过 OneToOne 关系连接的 django 模型,但我无法看到如何在 Tastypie ModelResource 中连接它们。

我将借用Including child resources in a Django Tastypie API 中定义的模型,而不是发布一些新模型,以说明我在哪些地方无法做到这一点。使用TicketTicketComment 模型,想象TicketComment 是这样的:

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

而不是使用 ForeignKey 字段。我已经看到文档以及上面使用ToManyFieldToOneField 的帖子。但这在我的情况下似乎不起作用,因为Ticket 没有引用TicketComment。我想要做的是能够创建一个在Ticket 中列出TicketComment 的API。 Tastypie 正确地抛出了一个异常,指出 TicketComment 字段在 Ticket 模型中不存在。有没有办法将漂亮的序列化TicketComment 放入Ticket API?

【问题讨论】:

    标签: django tastypie


    【解决方案1】:

    有一个attribute 参数告诉tastepie 它应该使用哪个字段。 Ticket 通过反向关系引用 TicketComment。默认情况下,它将是一个小写的模型名称,因此在您的示例中它将是ticketcomment。但我建议您在模型中明确设置related_name 属性,以便您知道它是如何连接的。

    所以在你的美味派中你应该这样做:

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

    它会正常工作。 OneToOneField 中的第二个参数是一个属性。

    【讨论】:

    • 这对我有用:comment = fields.OneToOneField('TicketCommentResource', 'ticketcomment') 你是这个意思吗?
    • 并序列化Ticket中的TicketComment使用OneToOneField('TicketCommentResource', 'ticketcomment', full=True)
    • 我在 POST 上失败并出现以下错误 - 在 hydrate\n value = super(ToOneField, self).hydrate(bundle)\n\n File \"/Library/Python/2.7/site -packages/tastypie/fields.py\",第 154 行,在 hydrate\n elif self.attribute 和 getattr(bundle.obj, self.attribute, None):\n\n 文件 \"/Library/Python/2.7/ site-packages/Django-1.4.1-py2.7.egg/django/db/models/fields/related.py\",第 343 行,在 __get__\n raise self.field.rel.to.DoesNotExist\n\ nDoesNotExist\n"}" 您是否尝试进行 POST 或 GET?
    猜你喜欢
    • 2011-12-02
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2012-11-08
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多