0

最近、django で RESTful API を調べたところ、Tastypie に出会いました。次の質問に出くわしました。

  1. 水和物または水和物_FOOを使用している場合、引き続きobj_createを使用しますか? もしそうなら、obj_create を使用したほうがよい条件はどれですか? 簡単なシナリオの説明は何に使用されますか?
  2. ハイドレートを使用する場合、私の理解では、POST/Update/Patch リクエストのみを受信したときにハイドレートを使用して、bundle.data でデータを転送し、正しい bundle.obj.Field を設定します。水和物を使用する他のケースはありますか?
  3. すでに hydrate_FOO がある場合、full_hydrate と hydrate メソッドを使用する意味は何ですか? 最初の 2 つが必須またはより適切に使用される特定の例はありますか?
  4. 次の例を検討してください。

クライアントからのデータ:

{
    "A": "abc",
    "B": "lifeisgood"
}

モデル ファイル:

class A(models.Model):
  Astr = models.CharField(max_length=30)

class B(models.Model):
  Bstr = models.CharField(max_length=30)

class C(models.Model):
  a = models.ForeignKey(A)
  b = models.ManyToManyField(B)
  data = models.DateTime(auto_now=True)

リソース ファイルは次のとおりです。

class CResource(ModelResource):
  a = fields.ToOneField(AResource, "iamA")
  b = fields.ToManyField(BResource, "iamB")

クライアントからデータを取得し、それが POST である場合、現在行っていることは次のとおりです。

def hydrate_a(self, bundle):
  bundle.obj.a = A.objects.get(Astr = bundle.data['A'])
  return bundle
def hydrate_b(self, bundle):
  bundle.obj.b = B.objects.filter(Bstr = bundle.data['B'])
  return bundle

しかし、私が得た結果は次のとおりです。

  1. A リソースはデータベースに入り、B リソース (ManyToMany) は入りません。
  2. それは私にエラーを与える: /lib/python2.6/site-packages/django_tastypie-0.10.0-py2.6.egg/tastypie/resources.py\"、195 行目、ラッパー内\n response = callback(request, *args, **kwargs )\n\n ファイル \"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django_tastypie-0.10.0-py2.6.egg/tastypie/resources .py\"、426 行目、dispatch_list 内\n return self.dispatch('list', request, **kwargs)\n\n ファイル \"/opt/local/Library/Frameworks/Python.framework/Versions/2.6 /lib/python2.6/site-packages/django_tastypie-0.10.0-py2.6.egg/tastypie/resources.py\"、458 行目、ディスパッチ内\n response = method(request,**kwargs)\n\n ファイル \"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django_tastypie-0.10.0-py2.6.egg/ Tastypie/resources.py\"、1320 行目、post_list 内\n updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))\n\n ファイル \"/opt/local/Library/Frameworks/Python. Framework/Versions/2.6/lib/python2.6/site-packages/django_tastypie-0.10.0-py2.6.egg/tastypie/resources.py\"、2084 行目、obj_create 内\n return self.save(bundle) \n\n ファイル \"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django_tastypie-0.10.0-py2.6.egg/tastypie/resources. py\"、2235 行目、保存\n self.save_m2m(m2m_bundle)\n\n ファイル \"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages /django_tastypie-0.10.0-py2.6.egg/tastypie/resources.py\"、2326 行目、save_m2m 内\n related_mngr = getattr(bundle.obj, field_object.attribute)\n\n ファイル \"/opt/local/Library/Frameworks /Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/fields/related.py\"、279 行目get \n raise self.related.model.DoesNotExist\n\nDoesNotExist\n" }

これが正しくない理由は何ですか?フロントエンドで指定されたデータから、POST を実行するときに外部キーまたは多数の関連データを保存するための推奨される方法は何でしょうか。

どうもありがとう!-レオ

4

0 に答える 0