Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-模型上的访问字段';s";透过「;实例中的表_Python_Django_Many To Many - Fatal编程技术网

Python Django-模型上的访问字段';s";透过「;实例中的表

Python Django-模型上的访问字段';s";透过「;实例中的表,python,django,many-to-many,Python,Django,Many To Many,我与直通表有多对多关系,如下所示: 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 = mode

我与直通表有多对多关系,如下所示:

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()
我能够按如下顺序获得一章的幻灯片:

chapter = Chapter.objects.get(pk=1)
chapter_slides = chapter.slides.order_by('slideorder')
但是,在处理单个幻灯片实例时,我无法访问幻灯片顺序:

slide = Slide.objects.get(pk=1)
如果在幻灯片实例上执行以下操作,我可以看到所有可能的字段:

print slide._meta.get_all_field_names()
['title', u'chapters', 'slideorder', u'id']
但是,尝试访问
slideorder
字段时,会出现以下情况:

slide.slideorder
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Slide' object has no attribute 'slideorder'
slide.slideorder
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“Slide”对象没有属性“slideorder”

我可以访问列出的所有属性,除了
slideorder
。如何访问幻灯片的顺序?

您可以使用
slide.slideorder\u set
,如中所述,您可以直接在
slideorder
模型上进行筛选

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

有关更多信息,请参阅上的文档。

因此,获取特定幻灯片的幻灯片顺序的唯一方法是执行3个查询<代码>章节=章节.对象.获取(pk=1),幻灯片=幻灯片.对象.获取(pk=1),幻灯片顺序=幻灯片顺序.对象.获取(幻灯片=幻灯片,章节=章节),打印幻灯片顺序.编号根据您的操作,您应该能够使用或。例如
SlideOrder.objects.filter(slide=1,chapter=1)。选择相关('slide','chapter')
是一个查询。