2013-02-11 1 views
3

Я слежу за документами Tastypie и обнаружил, что я полностью застрял. У меня есть следующие:Невозможно получить ToMany для работы в 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' 

[UPDATE: Выше API работал - на основе одной приведенные ниже модели]

Вот мои модели.

МОДЕЛЬ - Milestone:

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' имеет атрибута «вехи», «трассировка»: «Traceback (последний последний вызов): \ n \ n Файл \" C: \ Python27 \ lib \ site-packages \ tastypie \ resources.py \ ", строка 192, в обертке \ n response = callback (запрос, * args, ** kwargs) \ n \ n Файл \ "C: \ Python27 \ lib \ site-packages \ tastypie \ resources.py \", строка 406, в dispatch_detail \ n возвращает self.dispatch ('detail', request, ** kwargs) \ n \ n Файл \ C: \ Python27 \ lib \ site-packages \ tastypie \ resources.py \ ", строка 427, в диспетчере \ n response = метод (запрос, ** 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» не имеет атрибутов «вехи» \ n "}

+0

Можете ли вы опубликовать свою модель?Это помогло бы – Jonathan

+0

Отсутствие связанного имени = этапы в отношении Project-Milestone. – UnLiMiTeD

+0

Я включил свои модели в обновление. – dizzyguy

ответ

2

Из опубликованного кода я выясняю, что ваш Модель Milestone должна выглядеть так:

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' 
+0

Я пробовал, но такую ​​же ошибку. Я добавил свои модели, если это поможет. (ps я получаю сообщение об ошибке «__init __() занимает не менее 3 аргументов (3 приведенных)» с вашим кодом, мне нужно добавить дополнительный аргумент, например «проекты», чтобы избавить эту ошибку) – dizzyguy

+0

ХОРОШАЯ новость заключается в том, что Я, наконец, получил другую ошибку, но не уверен, что означает объект «Параметры»? Разве это не понимает «проекты»? – dizzyguy

+0

{"error_message": "Объект 'не имеет атрибута' api_name '", "traceback": "Traceback (последний последний вызов): \ n \ n Файл \" C: \\ Python27 \\ lib \\ site -пакеты \\ tastypie \\ resources.py \ ", ... Файл \" C: \\ Python27 \\ lib \\ site-packages \\ tastypie \\ fields.py \ ", строка 465, в get_related_resource \ n if related_resource._meta.api_name None: \ n \ nAttributeError: объект «Параметры» не имеет атрибута «api_name» \ n "} – dizzyguy

3

:: Дополнительные ресурсы ::

This blog has an excellent django-tastypie reverse relationship example

Когда у меня была ошибка AttributeError: Объект «Параметры» не имеет атрибута «api_name» \ n "}

Я имел пример строки набранного, как

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

Убедитесь, что вы перечисляя»..api.Milestone Ресурс

~ Также ~

Если вы получив пустой список, где находятся отношения, убедитесь, что второй аргумент, который вы передаете в «.ToManyField», соответствует вашему родному имени, указанному в вашем файле модели.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^