【问题标题】:Grabing first object for each item related to items in an array - DJango为与数组中的项目相关的每个项目获取第一个对象 - DJango
【发布时间】:2017-12-04 05:54:45
【问题描述】:

我正在处理一个 django 项目。我有两张桌子,分别是小组和小组活动。组存储有关创建的组的信息。 GroupActivity 存储与组相关的所有活动。例如,一个名为 Welcome 的组将存储在组表中,其中包含有关该组的信息。如果将成员添加到组中,则会在组活动表中记录该活动。我想创建一个系统,允许我抓取某人所属的所有组,并且对于每个组,抓取用户所属的每个组的最后一个活动。我尝试使用两个不同的查询并使用两个 for 循环,但它根本不起作用。任何人都可以帮我解决这个问题。这是我的代码

这是表格:

class Group(models.Model):
    name = models.CharField(max_length = 25)
    description = models.CharField(max_length = 250, null=True)
    created_by = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

class GroupActivity(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    expense = models.ForeignKey(Expense, null=True, on_delete=models.CASCADE)
    bundle = models.ForeignKey(Bundle, on_delete=models.CASCADE, null=True)
    description = models.CharField(max_length=200, default='some action')
    host = models.CharField(max_length=100, null=True)
    reference = models.IntegerField(default=0)
    category = models.SmallIntegerField(default = 1)
    created = models.DateTimeField(auto_now_add=True)

这是我在 views.py 文件中的内容:

# ensure someone is logged in
@login_required(login_url='/login/')
# groups home page
def groups_home(request):
    # grab the logged in user
    user = request.user
    # grab all of the groups you are a member of
    groups = Member.objects.filter(user = user).all()
    # everythin that is going to be passed to the html template
    activities = GroupActivity.ojects.order_by('group').desc()
    parameters = {
        'groups':groups,
        'activities':activities,
    }
    return render(request, 'groups/groups.html', parameters)

这里是html模板:

      {% for group in groups %}
        <p>
          <a href="{% url 'group_home' group.group.name|slugify group.group.id %}">{{ group.group.name }}</a>
        </p>
      {% endfor %}

例子:

two groups = Bros and Sisters 
activity = Bros => josh was added
                => steve was added 
                => josh sent steve a message 
           Sisters => jessica added jenny 
                   => jessica added julie 
                   => jessica added stephanie

I want to grab the two groups = Bros and Girls
I want to grab the actviities = josh sent steve a message 
                              = jessica added stephanie

我想在应用程序的主屏幕上像 whatsapp 组一样显示组和最后一个活动。

谁能帮帮我。

【问题讨论】:

  • 嘿,@OmarJandali,我想知道,这些答案对你有帮助吗?

标签: python django django-models django-rest-framework django-views


【解决方案1】:

您可以使用反向关系,而不是直接查询活动,而是在模板中使用类似的东西

{% for group in groups %}
    <p>
      <a href="{% url 'group_home' group.group.name|slugify group.group.id %}">{{ group.group.name }}</a>
    </p>
    {% for act in group.activity_set.all %}
        {{ act.description }}
    {% endfor %}
  {% endfor %}

有关更多信息,请查看 django 文档中的 this 页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2021-04-01
    • 2013-09-07
    • 1970-01-01
    • 2013-06-08
    • 2019-10-11
    相关资源
    最近更新 更多