【问题标题】:Creating a tastypie resource with a foreign key without exposing the foreign key as a resource使用外键创建一个美味的资源而不将外键作为资源公开
【发布时间】:2013-03-01 16:01:08
【问题描述】:

有许多问题看起来与我的相似,但似乎都没有涵盖我的特定表述。如果我错过了涵盖此内容的内容,我们深表歉意。

我有一个美味的 ModelResource,它表示一个带有 ForeignKey 的模型。我希望能够创建该类型的新资源,但我不想将外键的模型暴露给 api。

为其添加资源会很好,但我不希望站点代码外部的任何内容能够读取/写入外键。不过,从我到目前为止的尝试来看,如果相应的外键模型也具有可以创建的资源,那么美味派似乎只能处理这种类型的外键。我只想能够创建引用现有外键对象的模型,不允许创建新的。

这是可以在美味派中完成的事情吗?如果是这样,我需要做什么才能做到这一点?如果没有,是否有某种解决方法/妥协?

【问题讨论】:

    标签: django tastypie


    【解决方案1】:

    如果您不希望外键在 api 上可见,请不要在资源中为其创建字段。 如果您需要在创建/更新时为其指定一些值,您可以覆盖此资源的 obj_create/obj_update 美味派方法。例如:

    def obj_create(self, bundle, request=None, **kwargs):
        obj = super(YourResource, self).obj_create(bundle, request, **kwargs)
        obj.yourforeighnkey = somevalue
        obj.save()
        return obj   
    

    【讨论】:

    • 我做了更多的寻找并找到了一个可能与您建议的解决方案类似的解决方案,但如果它不是正确的方法,我不想将其作为答案提交这样做。在我的资源上,我没有将外键添加为外键,而是将其添加为与表示模型中的外键字段同名的整数字段。这是一种可以接受的方法还是我应该覆盖 obj_create?
    • 这取决于你想要什么。如果您将其添加为整数字段,它将通过 api 作为整数字段可见,如果您未将其设置为只读,则可以通过 api 进行更改..
    • 为了我的目的,如果外键的主键可见,我想阻止的是必须将整个外键对象添加到 api,并具有与引用的模型相同的权限它。我没有考虑只读部分,所以这绝对有帮助。如果我将它标记为只读,那会阻止通过api创建新资源还是创建资源有异常?
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多