2017-02-26 73 views
1

幾個形象我想添加一些圖片我的產品,而且已經有Django。產品

models.py:

class Product(models.Model): 
    category = models.ForeignKey(Category, related_name='products') 
    name = models.CharField(max_length=200, db_index=True) 
    slug = models.SlugField(max_length=200, db_index=True) 
    short_description = models.CharField(max_length=200, blank=True) 
    description = models.TextField(blank=True) 
    product_information = models.TextField(blank=True) 
    price = models.DecimalField(max_digits=10, decimal_places=0) 
    stock = models.PositiveIntegerField() 
    available = models.BooleanField(default=True) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    class Meta: 
     ordering = ('name',) 
     index_together = (('id', 'slug'),) 
    def __str__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse('shop:product_detail', 
         args=[self.category.slug, self.slug]) 

class Images (models.Model): 
    product = models.ForeignKey(Product, default=None, related_name='images') 
    image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True) 

,但我無法通過管理頁面上傳圖片。 admin.py

class ProductAdmin(admin.ModelAdmin): 
    list_display = ['name', 'slug', 'category', 'price', 'stock', 'available', 'created', 'updated'] 
    list_filter = ['available', 'created', 'updated', 'category'] 
    list_editable = ['price', 'stock', 'available'] 
    prepopulated_fields = {'slug': ('name',)} 
admin.site.register(Product, ProductAdmin) 

我應該如何改變我的代碼,以便能夠使用管理頁面我的產品添加多個圖片? 我應該如何調用頁面代碼中的圖像?

現在,我打電話圖像使用{{product.image}}

我已經花了很多時間去尋找答案。請幫忙。 =)

回答

0

您可以在此處使用的是管理員內聯,可幫助您輕鬆編輯/更新相關項目。

class ImageInline(admin.TabularInline): 
    model = Image 

class ProductAdmin(admin.ModelAdmin): 
    ... 
    inlines = [ 
     ImageInline, 
    ] 

爲:

class ProductImagesInline(admin.StackedInline): 
    model = Images 

class ProductAdmin(admin.ModelAdmin): 
    list_display = ['name', 'slug', 'category', 'price', 'stock', 'available', 'created', 'updated'] 
    list_filter = ['available', 'created', 'updated', 'category'] 
    list_editable = ['price', 'stock', 'available'] 
    prepopulated_fields = {'slug': ('name',)} 
    inlines = [ProductImagesInline] 

一旦圖像,你可以像product.images.all()

+0

Django的返回NameError:名字「形象」是沒有定義 –

+0

你需要從你的模型頂部 –

+0

@ViktorDemin你爲什麼要取消接受它導入了嗎? –

1

使用Inline管理員爲Image之一(!是的,你應該給它一個奇異的名字)模型訪問它們在模板中正確顯示圖像,您應該考慮縮略圖庫,如sorleasy-thumbnails

# sorl example 
{% for image in product.images.all %} 
    {% thumbnail image.image "500x500" format="PNG" upscale=False as thumb %} 
    #     ^^^^^ you need the image field here 
    <img src="{{ thumb.url }}" alt="{{ product.name }}"> 
    {% endthumbnail %} 
{% endfor %} 

除此之外,您可以通過image.image.url訪問Image的網址。這是您的原始圖像文件將被送達的地方。這需要您正確配置MEDIA_ROOTMEDIA_URL

+0

django返回NameError:name'Image'未定義 –

+0

是的,我冒昧地將您的模型名稱從'Images''- ;-) – schwobaseggl

1
models.py 

class Product(models.Model): 
    ''''fields'''' 

class Image(models.Model): 
    image = models.ImageField() 

admin.py 

from yourapp.models import Product, Images 

class InlineImage(admin.TabularInline): 
    model = Images 

class ProductAdmin(admin.ModelAdmin): 
    inlines = [InlineImage] 

admin.site.register(Product, ProductAdmin)