Django-访问模型的“通过"字段实例中的表 [英] Django - Access fields on a model's "through" table from an instance

查看:56
本文介绍了Django-访问模型的“通过"字段实例中的表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我与一个贯通表具有多对多关系,如下所示:

I have a many-to-many relationship with a through table like so:

class Chapter(models.Model):
    name = models.CharField(max_length=255,)
    slides = models.ManyToManyField('Slide', blank=True, related_name='chapters', through='SlideOrder')
    # ...

class Slide(models.Model):
    title = models.CharField(max_length=255,)
    # ...

class SlideOrder(models.Model):
    chapter = models.ForeignKey(Chapter)
    slide = models.ForeignKey(Slide)
    number = models.PositiveIntegerField()

我可以按以下顺序获取某章的幻灯片:

I am able to get the slides for a chapter in order like so:

chapter = Chapter.objects.get(pk=1)
chapter_slides = chapter.slides.order_by('slideorder')

但是,当处理单个幻灯片实例时,我无法访问幻灯片顺序:

However, when working on an individual slide instance I am unable to access the slide order:

slide = Slide.objects.get(pk=1)

如果我在幻灯片实例上执行以下操作,则可以看到所有可能的字段:

If I do the following on my slide instance I can see all possible fields:

print slide._meta.get_all_field_names()
['title', u'chapters', 'slideorder', u'id']

但是,尝试访问slideorder字段会给我以下内容:

However trying to access the slideorder field gives me the following:

slide.slideorder
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Slide' object has no attribute 'slideorder'

我能够访问除slideorder之外列出的所有属性.如何访问幻灯片的订单?

I am able to access all attributes listed except slideorder. How can I access a slide's order?

推荐答案

您可以直接在SlideOrder模型上进行过滤

You can either filter on the SlideOrder model directly

slide = Slide.objects.get(pk=1)
slide_orders = SlideOrder.objects.filter(slide=slide)
for slide_order in slide_orders:
    print slide_order.number

或向后跟随外键:

slide = Slide.objects.get(pk=1)
slide_orders = slide.slideorder_set.all()
for slide_order in slide_orders:
    print slide_order.number

请参见

See the docs on extra fields on many-to-many relationships for more info.

这篇关于Django-访问模型的“通过"字段实例中的表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆