Python Django模型在模板中不可移植

Python Django模型在模板中不可移植,python,django,django-templates,Python,Django,Django Templates,我试图通过迭代一个模型来获得列表中的第一个图像,这给了我一个错误,模型是不可编辑的。下面是我的模型和模板代码。我只需要获得列表中与单个产品关联的第一个图像 models.py: class Product(models.Model): title = models.CharField(max_length=500) description = models.TextField(blank=True, null=True) price = models.DecimalFie

我试图通过迭代一个模型来获得列表中的第一个图像,这给了我一个错误,模型是不可编辑的。下面是我的模型和模板代码。我只需要获得列表中与单个产品关联的第一个图像

models.py:

class Product(models.Model):
    title = models.CharField(max_length=500)
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(max_digits=20, decimal_places=2)
    sku = models.CharField(null=True, max_length=100)
    url = models.URLField(blank=True)
    slug = models.SlugField(unique=True)
    categories = models.ManyToManyField('Category', blank=True)
    default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)
    provider = models.ForeignKey('Product', on_delete=models.CASCADE)

    def __unicode__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('product_detail', kwargs={"slug": self.slug})

    def get_image_url(self):
        img = self.productimage_set.first()
        if img:
            return img.image.url
        return img
    def get_image_list(self):
        return self.productimage_set.all()

def image_upload_to(instance, filename):
    title = instance.product.title
    slug = slugify(title)
    basename, file_extension = filename.rsplit('.', 1)
    new_filename = '%s-%s.%s' % (basename, instance.id, file_extension)
    return 'products/%s/%s' % (slug, new_filename)

class ProductImage(models.Model):
    product = models.ForeignKey(Product)
    image = models.ImageField(upload_to=image_upload_to)

    def __unicode__(self):
        return self.product.title
prduct_detail.html:

<div class="pics clearfix">
<div class="thumbs">
{% for img in product.get_image_list %}
<div class="preview">
<a href="{{ img.get_absolute_url }}" class="selected" data-full="{{ img.image.url }}" data-title="title"> <img src="{{ img.image.url }}"> </a>
</div>
{% endfor %}
</div>
<div class="imglarge">
{% for img in object.productimage_set.all %}

<a href="{{ object.get_absolute_url }}" class="full" title="title"> <img src="{{ img.image.url }}"> </a>

{% endfor %}

</div>
</div>

您可以使用
all
获取所有相关的产品图像并对其进行迭代:

{% for img in object.productimage_set.all %}
但是如果您得到一个对象,比如当您得到第一个相关的产品图像时,您就不能迭代:

{{ object.productimage_set.first }}
这就是为什么你会出错

对象是不可编辑的


您只有一个对象。如果你需要所有的对象,你应该考虑使用<代码>所有< /代码>。

你可以使用<代码>使用< /Cult>标签,而不是<代码> < < /> >以避免错误:

更改此项:

{% for img in object.productimage_set.first %}
...
{% endfor %}

{% for img in object.productimage_set.first %}
...
{% endfor %}
{% with img=object.productimage_set.first %}
...
{% endwith %}