4

私は Tastypie のドキュメントに従っていますが、完全に立ち往生していることに気づきました。私は次のものを持っています:

API:

class ProjectResource(ModelResource):
    milestones = fields.ToManyField('ProjectTrackerServer.projects.api.MilestoneResource', 'projects', related_name='project', full=True)

    class Meta:
        queryset = Project.objects.all()
        resource_name = 'project'


class MilestoneResource(ModelResource):
    project = fields.ToOneField('ProjectTrackerServer.projects.api.ProjectResource', 'project')

    class Meta:
        queryset = Milestone.objects.all()
        resource_name = 'milestone'

[更新: 上記の API は機能しました - 以下のモデルに基づいています]

これが私のモデルです。

モデル - マイルストーン:

from django.db import models
from ProjectTrackerServer.projects.models import Project
class Milestone(models.Model):
    project = models.ForeignKey(Project, related_name='projects')
    name = models.TextField()
    start_date = models.DateField()
    due_date = models.DateField()
    completed_date = models.DateField()
    description = models.TextField()
    status = models.IntegerField()

def __unicode__(self):
    return self.name

モデル - プロジェクト:

from django.db import models
from django.template.defaultfilters import slugify

class Project(models.Model):
     name = models.CharField(max_length=200)
     start_date = models.DateField()
     end_date = models.DateField()
     pm_id = models.IntegerField()
     status = models.IntegerField()
     slug = models.SlugField()

     def __unicode__(self):
         return self.name

     def save(self, *args, **kwargs):
         if not self.slug:
             self.slug = slugify(self.name)[:50]
             return super(Project, self).save(*args, **kwargs)

それでも同じエラーが発生します。

{"error_message": "'Project' object has no attribute 'milestones'", "traceback": "Traceback (最新の呼び出しが最後):\n\n File \"C:\Python27\lib\site-packages\tastypie \resources.py\"、192 行目、ラッパー内\n response = callback(request, *args, **kwargs)\n\n ファイル \"C:\Python27\lib\site-packages\tastypie\resources.py \"、406 行目、dispatch_detail 内\n return self.dispatch('detail', request, **kwargs)\n\n ファイル \"C:\Python27\lib\site-packages\tastypie\resources.py\" 、427 行目、dispatch 内\n response = method(request, **kwargs)\n\n ファイル \"C:\Python27\lib\site-packages\tastypie\resources.py\"、1058 行目、get_detail\ n bundle = self.full_dehydrate(bundle)\n\n ファイル \"C:\Python27\lib\site-packages\tastypie\resources.py\"、654 行目、full_dehydrate 内\n bundle.data[field_name] = field_object.dehydrate(bundle)\n\n ファイル \"C:\Python27\lib\site-packages\tastypie\fields.py\"、690 行目、dehydrate 内\n the_m2ms = getattr(bundle.obj, self.attribute)\n\nAttributeError: 'Project' オブジェクトに属性 'milestones' がありません\n"}

4

2 に答える 2

4

::追加リソース::

このブログには、優れた django-tastypie の逆関係の例があります

エラーAttributeError: 'Options' object has no attribute 'api_name' が発生したとき\n"}

例の行を次のように入力しました

 milestones = fields.ToManyField('ProjectTrackerServer.projects.api.Milestone', 'projects', full=True)

「..api.Milestoneリソースをリストしていることを確認してください。

~また~

リレーションシップがある空のリストを取得している場合は、「.ToManyField」に渡す 2 番目の引数が、モデル ファイルで指定された関連名と一致していることを確認してください。

milestones = fields.ToManyField('ProjectTrackerServer.projects.api.MilestoneResource', 'projects', full=True)

class Milestone(models.Model):
    project = models.ForeignKey(Project, related_name='projects')
    ...
于 2016-01-25T20:05:05.997 に答える
3

投稿されたコードから、マイルストーンモデルは次のようになるはずです。

class Milestone(models.Model):
    project = ForeignKey(Project, related_name='milestones')

更新しました:

作業リソースは次のようになります。

class ProjectResource(ModelResource):
  milestones = fields.ToManyField('ProjectTrackerServer.projects.api.MilestoneResource', 'projects', full=True)
class Meta:
    queryset = Project.objects.all()
    resource_name = 'project'


class MilestoneResource(ModelResource):
    project = fields.ForeignKey(Project, 'project')

    class Meta:
        queryset = Milestone.objects.all()
        resource_name = 'milestone'
于 2013-02-12T10:43:07.037 に答える