python - Django - Access fields on a model's "through" table from an instance -
i have many-to-many relationship through table 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 able slides chapter in order so:
chapter = chapter.objects.get(pk=1) chapter_slides = chapter.slides.order_by('slideorder')
however, when working on individual slide instance unable access slide order:
slide = slide.objects.get(pk=1)
if following on slide instance can see possible fields:
print slide._meta.get_all_field_names() ['title', u'chapters', 'slideorder', u'id']
however trying access slideorder
field gives me following:
slide.slideorder traceback (most recent call last): file "<console>", line 1, in <module> attributeerror: 'slide' object has no attribute 'slideorder'
i able access attributes listed except slideorder
. how can access slide's order?
you can either filter on slideorder
model directly
slide = slide.objects.get(pk=1) slide_orders = slideorder.objects.filter(slide=slide) slide_order in slide_orders: print slide_order.number
or follow foreign key backwards:
slide = slide.objects.get(pk=1) slide_orders = slide.slideorder_set.all() slide_order in slide_orders: print slide_order.number
see docs on extra fields on many-to-many relationships more info.
Comments
Post a Comment