问题描述
基本上,我正在练习Django的电子商务项目。有两种添加图像的方法。 (1)-首先是有人手动添加照片,但我希望用户通过静态文件自动添加产品的照片。
models.py:
from django.db import models
# Create your models here.
class Mobile(models.Model):
brand = models.CharField(max_length=30)
price = models.IntegerField(default=1)
color = models.CharField(max_length=30)
screen_size = models.IntegerField(default=5)
os = models.CharField(max_length=30,default='Samsung')
def __unicode__(self):
return 'This is a mobile'
def get_price(self):
return self.price
class MobileImage(models.Model):
device = models.ForeignKey(Mobile,on_delete=models.CASCADE)
image = models.ImageField(upload_to='media/images/')
def __unicode__(self):
return self.device
class Laptop(models.Model):
brand = models.CharField(max_length=30)
price = models.IntegerField(default=1)
color = models.CharField(max_length=30)
screen_size = models.IntegerField(default=5)
os = models.CharField(max_length=30,default='Dell')
def __str__(self):
return self.brand
我的views.py:
def mobile(request):
mobiles = Mobile.objects.all()
context = {
'mobiles': mobiles
}
return render(request,'device/mobile.html',context)
def laptop(request):
laptops = Laptop.objects.all()
context = {
'laptops': laptops
}
return render(request,'device/laptop.html',context)
我的mobile.html:
{% extends 'device/base.html' %}
{% load static %}
{% block body %}
<h1>Mobile!</h1>
<!-- Table -->
<table class="">
<tr>
<h3>Phones:</h3>
<th>ID</th>
<th>Model</th>
<th>Price</th>
<th>Color</th>
<th>Screen Size</th>
<th>OS</th>
<th>Image</th>
</tr>
<body>
{% for mobile in mobiles %}
<tr>
<td>{{ forloop.id }}</td>
<td>{{ mobile.brand }}</td>
<td>${{ mobile.price }}</td>
<td>{{ mobile.color }}</td>
<td>{{ mobile.screen_size }}</td>
<td>{{ mobile.os }}</td>
{% for item in mobile.mobileimage_set.all %}
<td><img src="{{ MEDIA_URL }}{{ item.image }}" alt="No Photo"></td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
在第一张图片中,它显示了我的静态文件的路径。 在第二张图像中,它显示了我面临的问题。
解决方法
将{{ item.image }}
替换为以下代码{{ item.image.url }}
因此,我在这里所做的基本上是从MobileImage类中删除图像字段并添加到Mobile类本身。原因仅仅是因为我注意到您想使用外键来关联它,但是在这种情况下看起来不可行。如果您还有其他问题,请告诉我。 PS:您应该运行Makemigrations并迁移命令,因为数据库已更改。
将您的models.py文件更改为此
AMD
将您的views.py文件更改为此
class Mobile(models.Model):
brand = models.CharField(max_length=30)
price = models.IntegerField(default=1)
color = models.CharField(max_length=30)
screen_size = models.IntegerField(default=5)
os = models.CharField(max_length=30,default='Samsung')
image = models.ImageField(upload_to='media/images/')
class MobileImage(models.Model):
device = models.ForeignKey(Mobile,on_delete=models.CASCADE)
您的模板与此
def mobile(request):
mobiles = Mobile.objects.all()
context = {
'mobiles': mobiles
}
return render(request,'device/mobile.html',context)