如何在Django中从多对多关系中检索数据

pyn*_*ice 2 django django-models django-orm

我有两个这样的模型:

class GuestStatus(models.Model):
    guest_status = models.CharField(max_length=200)
    arrangement = models.IntegerField(unique=True, help_text="Start from 1. Guest status will be arranged alphabetically.")

class Guest(models.Model):

    user = models.ForeignKey(User)
    full_name = models.CharField(max_length=250)
    street_address = models.CharField(max_length=250, blank=True, null=True)
    city = models.CharField(max_length=150, blank=True, null=True)
    state = models.CharField(max_length=120, blank=True, null=True)
    zip_code = models.CharField(max_length=15, blank=True, null=True)

    status = models.ManyToManyField(GuestStatus, blank=True, null=True)
    invitation_date = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

我试图在模板中检索数据:

#Views.py:
guests = Guest.objects.filter(user_id=request.user.id)

# Template:
 {% for guest in guests %}
    <tr>
    <td width="5%"><input type="checkbox" value="{{ guest.id }}" name="guest_name" id="{{ forloop.counter }}" /></td>
    <td><a href="/{{ guest.id }}/guest/">{{ guest.full_name }}</td>
    <td>{{ guest.guests }}</td>
    <td>{{ guest.children }}</td>
    <td>{% for i in guest.gueststatus_set.all %}{{ i.status }}{% endfor %}</td>

    </tr>
    {% endfor %}
Run Code Online (Sandbox Code Playgroud)

这没有给出任何结果gueststatus.怎么了?

Roh*_*han 6

对于ManyToMany你没有得到_set,改变你的查询guest.status.all(),也可以使用{{i.guest_status}}作为GuestStatus具有guest_statusstatus.

<td>{% for i in guest.status.all %}{{ i.status }}{% endfor %}</td>
Run Code Online (Sandbox Code Playgroud)