Как вернуть данные из связанной модели в Django Tastypie? - PullRequest
0 голосов
/ 14 сентября 2011

Как мне ввести информацию из другой модели?

У меня есть две модели Article и ArticleBody

Статья, содержащая основную информацию и ArticleBody, содержащая цикл информации о теле и изображении

class Article(models.Model):
    author = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    excerpt = models.CharField(max_length=140, null=True, blank=True, help_text='A description no longer than 140 characters that explains what the article is about, important for SEO')
    category = models.ManyToManyField(Category)
    date_published = models.DateTimeField()
    slug = models.SlugField(null=True)
    status = models.CharField(choices=STATUS, max_length=2, default='DR')
    tags = TagField(default='', null=True, blank=True, help_text='Just add a comma between the tags i.e. "My very important name, Hunting, Scope, Rifle"')
    source_name = models.CharField(default='', blank=True, null=True, help_text='Outdoor Magazine', max_length=100)
    source_url = models.URLField(verify_exists=False, max_length=200, null=True, blank=True, help_text='http://www.source.com/2011/01/long-name/')

class ArticleBody(ImageModel):
    article = models.ForeignKey(Article)
    body = models.TextField(verbose_name='', blank=True, null=True)
    image = models.ImageField(storage=cloudfiles_storage, upload_to='articles', default='avatar-blank.jpg', verbose_name='', blank=True, null=True)
    caption = models.CharField(max_length=80, null=True, blank=True)

В моем файле api resources.py я пытаюсь получить информацию ArticleBody в свой NewsResource ...

Это то, что я имею до сих пор.

class NewsBodyResource(ModelResource):
    class Meta:
        queryset = ArticleBody.objects.all()
        resource_name = 'article_body'

class NewsResource(ModelResource):

    class Meta:
        queryset = Article.objects.filter(status='PU', date_published__lt=datetime.datetime.now).order_by('-date_published')
        resource_name = 'news'

Как правильно использовать TastyPIE для внесения изменений, чтобы я мог получить цикл ArticleBody в моем NewsResource?

1 Ответ

5 голосов
/ 14 сентября 2011
class NewsBodyResource(ModelResource):
    class Meta:
        queryset = ArticleBody.objects.all()
        resource_name = 'article_body'

class NewsResource(ModelResource):
    newsbodies = fields.ToManyField('yourapp.api.resources.NewsBodyResource', 'articlebody_set', full=True)

    class Meta:
        queryset = Article.objects.filter(status='PU', date_published__lt=datetime.datetime.now).order_by('-date_published')
        resource_name = 'news'

Параметры для ToManyField представляют соответственно следующее:

  1. относительный к проекту путь импорта в ресурс, представляющий набор

  2. имя поля, если оно находится в родительской модели, или атрибут related_name поля, если оно находится в дочерней модели

  3. независимо от того, вставлять или нет полные данные каждого дочернего элементав фид (True) или просто ссылки на ресурсы для каждого дочернего элемента (False)

...