Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模板中具有多对一关系的Django模型_Python_Django_Python 2.7_Django Models_Django Templates - Fatal编程技术网

Python 模板中具有多对一关系的Django模型

Python 模板中具有多对一关系的Django模型,python,django,python-2.7,django-models,django-templates,Python,Django,Python 2.7,Django Models,Django Templates,我有两个具有一对多关系的对象: from django.db import models class DownloadItem(models.Model): name = models.CharField(max_length=200) description = models.CharField(max_length=200) downloadItem = models.ImageField(upload_to='./images/downloadItems', bl

我有两个具有一对多关系的对象:

from django.db import models

class DownloadItem(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    downloadItem = models.ImageField(upload_to='./images/downloadItems', blank=True)

    def __unicode__(self):
        return self.name

class DownloadItemSample(models.Model):
    photo = models.ImageField(upload_to='./images/downloadItemsSample', blank=True)
    downloadItem = models.ForeignKey(DownloadItem, blank=True, null=True)
    order = models.IntegerField(default=0)
在我看来,我正在做以下工作:

from django.shortcuts import render
from mainstore.models import DownloadItem

def index(request):
    downloads_list = DownloadItem.objects.all()
    context = {'downloads_list': downloads_list}
    return render(request, 'mainstore/index.html', context)
在我的模板中,我希望获得以下信息:

from django.shortcuts import render
from mainstore.models import DownloadItem

def index(request):
    downloads_list = DownloadItem.objects.all()
    context = {'downloads_list': downloads_list}
    return render(request, 'mainstore/index.html', context)
{{downloads\u list.downloadItemSample\u set.all().order\u by('order')[0]}

我还想迭代数组,但是对于这个示例,我使用的是索引
0

我想写一个自定义模板标记,但我认为这不是最好的方法。我想我可以为
DownloadItem
模型编写一个方法,它接受一个索引并返回正确的
DownloadItemSample
对象,但目前我也无法创建这个方法


解决此问题的最佳方法是什么?

您永远无法获得
下载列表。downloadItemSample\u set
作为
下载列表
是一个查询集

实现这一目标的一个方法是:

{% for download in downloads_list %}
    {{ download.get_sample_by_order }}
{% endfor %}
这里,
get\u sample\u by\u order
是类
DownloadItem
中的一个助手方法,它返回我们需要的值

class DownloadItem(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    downloadItem = models.ImageField(upload_to='./images/downloadItems', blank=True)

    def __unicode__(self):
        return self.name

    def get_sample_by_order(self):   
        if self.downloaditemsample_set.count():
            return self.downloaditemsample_set.order_by('order')[0]

您将永远无法获得
下载列表。downloadItemSample\u集
因为
下载列表
是一个查询集

实现这一目标的一个方法是:

{% for download in downloads_list %}
    {{ download.get_sample_by_order }}
{% endfor %}
这里,
get\u sample\u by\u order
是类
DownloadItem
中的一个助手方法,它返回我们需要的值

class DownloadItem(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    downloadItem = models.ImageField(upload_to='./images/downloadItems', blank=True)

    def __unicode__(self):
        return self.name

    def get_sample_by_order(self):   
        if self.downloaditemsample_set.count():
            return self.downloaditemsample_set.order_by('order')[0]

这是一个很酷的解决方案,当我告诉您我可以在
DownloadItem
上编写一个方法时,我正在考虑这个问题,但它不支持索引。您是否也有解决方案?支持索引是什么意思?在助手方法中,您当前在返回值时使用数组的索引0。这可以作为参数更改吗?哦。。为此,您可以发送一个参数并将其称为
5 | download.get_sample_by_order
——但这在数据库层将非常繁重。索引仅用于调试。我将使用
get\u sample\u by\u order
返回整个数组,然后使用
for
模板对其进行迭代。你怎么认为?这可以吗?这是一个很酷的解决方案,我在考虑这个问题时告诉你,我可以在
DownloadItem
上编写一个方法,但它不支持索引。您是否也有解决方案?支持索引是什么意思?在助手方法中,您当前在返回值时使用数组的索引0。这可以作为参数更改吗?哦。。为此,您可以发送一个参数并将其称为
5 | download.get_sample_by_order
——但这在数据库层将非常繁重。索引仅用于调试。我将使用
get\u sample\u by\u order
返回整个数组,然后使用
for
模板对其进行迭代。你怎么认为?这样行吗?