0

为了将许多模型相互连接,我做了,例如:

Message.objects.filter(conversation__recipient__user=request.user)

当我想在模板端使用它时,它什么也没显示。例子:

{{row.conversation.recipient.user.username}}

这是我的代码:

模型:

class Conversation(models.Model):
    user = models.ForeignKey(User)         
    def __unicode__(self):
        return self.user

class Message(models.Model):
    conversation = models.ForeignKey(Conversation)
    title = models.CharField(max_length=50)
    body = models.CharField(max_length=500)
    parent = models.IntegerField(default=0)
    created = models.DateTimeField(auto_now_add=True)
    def __unicode__(self):
        return self.title

class Recipient(models.Model):
    user = models.ForeignKey(User)
    conversation = models.ForeignKey(Conversation)
    is_read = models.BooleanField(default=False)

看法:

def admin_index(request):
    rows = Message.objects.filter(conversation__recipient__user=request.user)
    return render(request,'message/admin/index.html',{'rows':rows})

模板:

{% for i in rows %}
    {% if not i.conversation.recipient.is_read %}
    <tr class="set_bold">
    {% else %}
    <tr>
    {% endif %}
        <td>name:{{i.conversation.recipient}}</td>
        <td class="col-md-0"><input type="checkbox"></td>
        <td class="col-md-2">{{i.conversation.user.username}}</td>
        <td><a href="{% url 'messages_read' i.id %}">{{i.title}}</a></td>
        <td>{{i.created|date:"y-m-d"}} <small>({{i.created|timesince}})</small></td>
    </tr>
{% empty %}
    <tr>
        <td colspan="4">{% trans "dont have any message" %}</td>
    </tr>
{% endfor %}

那么如何通过消息模型访问视图和模板中的收件人模型呢?

谢谢

4

1 回答 1

2

正如Recipient模型ForeignKeyConversation模型一样,对话有许多接收者。所以conversation对象将receipient_set作为查询集。您需要对其进行迭代并获取第一个/最后一个或所有要显示的对象。

所以您的模板代码需要更改为

{% for i in rows %}
    {%for recp in i.conversation.recipient_set.all %}
        {# do something with each recipient object
        {% if not recp.is_read %}
            <tr class="set_bold">
        {% else %}
        <tr>
       ....
    {%endfor%}

{%endfor%}
于 2013-11-06T12:18:11.617 回答