【问题标题】:How to retrieve data from many to many relationship in Django如何在 Django 中从多对多关系中检索数据
【发布时间】:2013-10-31 07:48:31
【问题描述】:

我有两个这样的模型:

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)

我正在尝试检索模板中的数据:

#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 %}

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

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    对于ManyToMany,您没有得到_set,请将您的查询更改为guest.status.all(),同时使用{{i.guest_status}},因为GuestStatus 具有guest_status 而不是status

    <td>{% for i in guest.status.all %}{{ i.status }}{% endfor %}</td>
    

    【讨论】:

    • {% for i in guest.status.all %}{{ i.guest_status }}{% endfor %} 因为 gueststatus 的 guest_status 字段没有状态。
    • 谢谢各位。但是如何在更新时做到这一点。我很确定“status = form.cleaned_data['status'] Guest.objects.filter(id=guest_id).update(status=status) 不起作用。
    • @user2032220,没有M2M不能这样更新,你需要做.add().remove()
    • 我如何知道他们是删除还是添加?你可以在你的答案中添加这个。那我会把答案标记为正确的。
    • @user2032220,请参阅此文档docs.djangoproject.com/en/dev/topics/db/examples/many_to_many 您应该发布另一个问题,详细说明您正在尝试的内容和问题。
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多