【问题标题】:Django ORM Query: getting "has many" relation objectsDjango ORM查询:获取“有很多”关系对象
【发布时间】:2010-08-20 06:59:25
【问题描述】:

有一个模型:

class DomainPosition(models.Model):
    domain   = models.ForeignKey(Domain)
    keyword  = models.ForeignKey(Keyword)
    date     = models.DateField()
    position = models.IntegerField()

    class Meta:
        ordering = ['domain', 'keyword']

如果对于每个域我想显示下一个表(表中的数字是位置值),如何获取模板的位置记录:

+----------+--------+--------+-------+--------
| keyword  | date1  | date2  | date3 | ...
+----------+--------+--------+-------+--------
| keyword1 |    2   |    6   |    7  |   ...
+----------+--------+--------+-------+--------
| keyword2 |    4   |   12   |    5  |   ...
+----------+--------+--------+-------+--------
| keyword3 |    6   |    3   |    9  |   ...
+----------+--------+--------+-------+--------

views.py:

def show_domain_history(request, domain_name):
    domain = Domain.objects.filter(name__contains=domain_name)
    if not domain:
        return HttpResponseRedirect('/')
    else:
        # positions = ...
        variables = RequestContext(request, {
            'domain':    domain[0].name,
            'positions': positions,
        })
        return render_to_response('history.html', variables)

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:
    def show_domain_history(request, domain_name):
        domain = Domain.objects.filter(name__contains=domain_name)
        if not domain:
            return HttpResponseRedirect('/')
        else:
            variables = {'domain': domain }
            return render_to_response('history.html', variables)
    

    现在在模板中,您可以通过以下方式迭代:

    {% for dom in domain %}
    
    name: {{ dom.name }}
    
    {% for item in dom.domainposition_set %} 
    
         date: item.date
    
         position: item.position
    {% endfor %}
    
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      由于您有一个从DomainPositionDomain 的外键,您应该能够使用dom.domainposition_set.all() 获得引用特定域dom 的所有域位置的集合。

      然后,您可以通过在模板中迭代此域位置列表来构建表。

      【讨论】:

      • 并且不要忘记,当您在模板中时,all 之后不需要括号。
      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 2017-07-18
      • 2012-09-18
      • 1970-01-01
      • 2019-04-22
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多