【问题标题】:How to get image connected by Foreign Key via Template in django如何通过django中的模板通过外键连接图像
【发布时间】:2015-10-30 09:37:24
【问题描述】:

我想从模板中的图像模型中获取图像。

class Products(models.Model):
    category = models.ForeignKey(Category)
    name= models.CharField(max_length=120, unique=True)
    slug = models.SlugField(unique = True)
    price = models.IntegerField(default=100)


class Image(models.Model):
    property = models.ForeignKey(Products, related_name='images')
    image = models.ImageField(upload_to='static/images/home',blank=True,null=True)

views.py

def index(request):
  queryset = Products.objects.all()
  return render_to_response('site/index.html',
                            locals(),
                            context_instance=RequestContext(request))



{% for query in queryset %} 
   <img src='/ {{ query.????? }} ' alt="" width = 'auto' height='340'/>
{% endfor %}

我想获取与该产品相关的图像

我读过link

我试过了:

{% for query in queryset %} 
   <img src='/ {{ query.images_all.0.image }} ' alt="" width = 'auto' height='340'/>
{% endfor %}

但没有成功..

【问题讨论】:

    标签: django foreign-keys foreign-key-relationship django-related-manager


    【解决方案1】:

    只是尝试了解我如何从与外键关系相关的模型中获取图像 url 的模型。

    我的模型:

    class Product(models.Model):
        title           = models.CharField(max_length = 400)
        slug            = models.SlugField(max_length = 400,unique=True,null=True,blank=True)
        is_popular      = models.BooleanField(default=True)
        category        = models.ForeignKey(Category,on_delete=models.CASCADE)
        subcategory     = models.ForeignKey(Subcategory,on_delete=models.CASCADE,null=True,blank=True)
        childcategory   = models.ForeignKey(Childcategory,on_delete=models.CASCADE,null=True,blank=True)
        brand           = models.ForeignKey(Brand,on_delete=models.CASCADE,null=True,blank=True)
        description     = models.TextField()
        is_active       = models.IntegerField(choices=STATUS_CHOICES)
        created_date    = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.title
    
        def save(self, *args, **kwargs):
            self.slug = unique_slug_generator(self) 
            super(Product, self).save(*args, **kwargs)
    
        def show_image(self):
            return self.productmeaserment_set.first().first_image()
    
       
                
    class ProductMeaserment(models.Model):
        product             = models.ForeignKey(Product,on_delete=models.CASCADE)
        measerment          = models.ForeignKey(Measerment,on_delete=models.CASCADE,null=True,blank=True)
        selling_price       = models.DecimalField(max_digits=20,decimal_places=2)
        offer_price         = models.DecimalField(max_digits=20,decimal_places=2)
        available_quantity  = models.IntegerField();
        is_active           = models.IntegerField(choices=STATUS_CHOICES)
        created_date        = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.measerment.name
    
        def first_image(self):
            return self.productmeasermentimage_set.first()
        
    
    
    class ProductMeasermentImage(models.Model):
        productmeaserment   = models.ForeignKey(ProductMeaserment,on_delete=models.CASCADE)
        image               = models.FileField(upload_to='uploads/products')
        is_active           = models.IntegerField(choices=STATUS_CHOICES)
        created_date        = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.productmeaserment.product.title
    

    views.py

    from products.models import Product
    def adminpanel(request):
        products=Product.objects.all()
        return render(request,'adminpanel/index.html',{'productsall':products})
    

    模板/管理面板/index.html

    {% for item in productsall %}
                <tr>
                    <div class="border1">
                      <td class="image-cell">
                        <img src="{{item.show_image.image.url}}">   #this is how i got image url.
                      </td>
                    </div>
                  <td data-label="title">{{item.title}}</td>
                  <td data-label="category">{{item.category}}</td>
                  <td data-label="subcategory">{{item.subcategory}}</td>
                  <td data-label="brand">
                    {{item.brand}}
                  </td>
                  <td data-label="description">
                    {{item.description}}
                  </td>
                  <td class="created">
                      {{item.created_date}}
                  </td>
                </tr>
                <tr>
                {% endfor %}
        
    

    【讨论】:

      【解决方案2】:

      你的代码有很多错误,我建议你先做 Django 教程。

      https://docs.djangoproject.com/en/1.8/intro/tutorial01/

      但如果你不希望它工作,这里是如何:

      models.py

      class Product(models.Model):
          category = models.ForeignKey(Category)
          name= models.CharField(max_length=120, unique=True)
          slug = models.SlugField(unique = True)
          price = models.IntegerField(default=100)
      
          def first_image(self):
              # code to determine which image to show. The First in this case.
              return self.images[0]
      
      class ProductImage(models.Model):
          image = models.ImageField(upload_to='static/images/home',blank=True,null=True)
          product = models.ForeignKey(Product, related_name='images')
      

      views.py

      def index(request):
          queryset = Products.objects.all()
          return render_to_response('site/index.html', {'products': queryset})
      

      index.html

      {% for product in products %} 
           <img src="{{ product.first_image.src }}" alt="" width="auto" height="340"/>
      {% endfor %}
      

      【讨论】:

      • 感谢用户 1797792。我已经学习了所有教程,现在我正在研究外键.. 感谢您的回答:)
      • 通过设置related_name,您定义了一个管理器,就像Model.objects一样。所以,你需要在它上面调用一个方法,比如 self.images.first() 但你已经使用了我认为应该抛出错误的索引。
      • 我还必须将 src 设置为 "{{ product.first_image.image.url }}" 才能使其工作。
      猜你喜欢
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2011-08-13
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多