【发布时间】:2017-09-18 15:49:12
【问题描述】:
所以,我有一个系统,用户可以从现有的图片库中进行选择,也可以上传要处理和保存的新图片。
首先,模型:
class Post(models.Model):
image = models.ForeignKey(Image, null=True, blank=True)
title = models.CharField(max_length=200)
slug = models.CharField(max_length=200, unique=True, blank=True)
description = models.TextField(blank = True)
text = models.TextField()
def __str__(self):
return self.title
和我们的表格
class PostForm(BaseModelForm):
new_image = forms.ImageField(required=False)
def clean(self):
return self.cleaned_data
class Meta:
model = Post
fields = ('title','text', 'image', 'new_image', description')
help_texts = {
'new_image': _('either upload a new image, or choose from the gallery')
}
那么我们的视图处理它的位置
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.slug=slugify(post.title)
if form.cleaned_data.get('new_image'):
image = Image(title=post.title, description=post.description, image = request.FILES['new_image'])
image.save()
post.image = image
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'blog/post_edit.html', {'form': form})
现在应该做的是从表单字段中创建一个新的图像对象,然后将其保存到 post 模型的外键约束中。但它的作用是什么,帖子上传正常,带有空白图像字段,并且永远不会创建图像。这让我认为“new_image”的 if 语句解析为 False,但我不知道为什么会这样做。
另外,为了约定,这应该发生在表单类还是视图类中?
还有,我的图像模型
class Image(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
image = models.ImageField(upload_to = 'images/', default = 'images/None/no-img.jpg')
def __str__(self):
return self.title
【问题讨论】: