ApPeL
ApPeL

Reputation: 4911

How do I return data from a related model in Django Tastypie?

How do I bring in the information from another model?

I have two models Article, and ArticleBody

Article containing the main info and ArticleBody containing a loop of body and image information

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)

In my api resources.py file I am trying to get the ArticleBody information into my NewsResource...

This is what I have so far.

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'

What is the correct TastyPIE way, of making changes so I can get a loop of ArticleBody into my NewsResource?

Upvotes: 0

Views: 1930

Answers (1)

Chris Pratt
Chris Pratt

Reputation: 239220

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'

The parameters to ToManyField represent the following respectively:

  1. project-relative import path to the resource representing the set

  2. the name of field if it's on the parent model or the related_name attribute of the field if it's on the child model

  3. whether or not to embed the full data of each child into the feed (True) or just resource links to each child (False)

Upvotes: 5

Related Questions