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

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -