Python django从queryset访问m2m字段属性

Python django从queryset访问m2m字段属性,python,django,Python,Django,我试图从queryset中显示django模板中M2M字段的属性之一 class Reservation(models.Model): hotel = models.ForeignField(Hotel) rooms = models.ManyToManyField(Room, through='ReservationRoom') class Room(models.Model): number = models.IntegerField(default=0) cla

我试图从queryset中显示django模板中M2M字段的属性之一

class Reservation(models.Model):
    hotel = models.ForeignField(Hotel)
    rooms = models.ManyToManyField(Room, through='ReservationRoom')

class Room(models.Model):
    number = models.IntegerField(default=0)

class ReservationRoom(models.Model):
    reservation = models.ForeignKey(Reservation, related_name='reservation_rooms', on_delete=models.PROTECT)
    room = models.ForeignKey(Room, on_delete=models.PROTECT)
    room_type = models.ForeignKey(RoomType, related_name='reservation_rooms', on_delete=models.PROTECT)
现在,从
Reservation
queryset,我尝试访问django模板(使用jinja模板)中的
rooms
fiels属性,即
number
,如下所示

 {% for res in reservations %}
     <tr>
        <td>{{ loop.index }}</td>
        {% for room in reservations.rooms_set.all%}
           <td>{{ room.number }}</td>
        {% endfor %}
     </tr>
 {% endfor %} 
但抛开下面的错误

'django.db.models.query.QuerySet object' has no attribute 'rooms_set'
我做错了什么

在尝试回答
neverwalkinner

Traceback Switch to copy-and-paste view

/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django/core/handlers/exception.py in inner
        response = get_response(request) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django/core/handlers/base.py in _legacy_get_response
        response = self._get_response(request) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django/core/handlers/base.py in _get_response
            response = self.process_exception_by_middleware(e, 
request) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django/core/handlers/base.py in _get_response
            response = wrapped_callback(request, *callback_args, 
**callback_kwargs) ...
▶ Local vars
/home/rayhan/work/XercesBlue/core/rbac/decorators.py in _wrapped_view
                    return view_func(request, hotel, *args, **kwargs) 
...
▶ Local vars
/home/rayhan/work/XercesBlue/pms/guest/views.py in arrivals
return render(request, "pms/guest/arrivals.html", {'reservations': 
res, 'arrivals': True}) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django/shortcuts.py in render
content = loader.render_to_string(template_name, context, request, 
using=using) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django/template/loader.py in render_to_string
return template.render(context, request) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/django_jinja/backend.py in render
    return mark_safe(self.template.render(context)) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/jinja2/environment.py in render
    return self.environment.handle_exception(exc_info, True) ...
▶ Local vars
/home/rayhan/work/venv/local/lib/python2.7/site-
packages/jinja2/environment.py in handle_exception
    reraise(exc_type, exc_value, tb) ...
▶ Local vars
/home/rayhan/work/XercesBlue/templates/pms/guest/arrivals.html in top-
level template code
{% do sidebar_items.user.update({'children': True}) %} ...
▶ Local vars
/home/rayhan/work/XercesBlue/templates/pms/base.html in top-level 
template code
    {% block content %} ...
▶ Local vars
/home/rayhan/work/XercesBlue/templates/pms/guest/arrivals.html in 
block "content"
                                    {% for room in res.rooms.all %} 
...
▶ Local vars


TypeError at /exe/hotel/260/guest/arrivals/
'instancemethod' object is not iterable
Request Method: GET
Request URL:    http://localhost:8000/exe/hotel/260/guest/arrivals/
Django Version: 1.11
Exception Type: TypeError
Exception Value:    
'instancemethod' object is not iterable

找到解决方案,在相关的
预回迁中添加
房间

res = Reservation.objects.filter(hotel=hotel).prefetch_related('rooms')
然后在模板中

{% for room in res.rooms.all() %}
   <td>{{ room.number }}</td>
{% endfor %}
{%用于res.rooms.all()中的文件室%}
{{room.number}
{%endfor%}

现在它显示了期望的结果,即房间号

您没有
rooms\u set
,因为您使用的是
表格。如果你不通过
使用
它会起作用。你有一个名为ReservationRoom的模型吗???@Exprator是的,我有..你能分享这个模型吗?@孩子分享了
ReservationRoom
模型。
{% for room in res.rooms.all() %}
   <td>{{ room.number }}</td>
{% endfor %}