我正在为BlogPage(Page)
保存模型并希望允许作者输入图像,但如果他们选择不这样做,则会自动保存特定图像。
这是我的模特:
from django.db import models
from core.models import Page
from modelcluster.fields import ParentalKey, ParentalManyToManyField
from modelcluster.tags import ClusterTaggableManager
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
class BlogPage(Page):
date = models.DateField('Post Date')
categories = ParentalManyToManyField('blog.BlogCategory', blank=True)
tags = ClusterTaggableManager(through=BlogPageTag, blank=True)
feed_image = models.ForeignKey(
'wagtailimages.Image',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
在ForeignKey
上设置save()
的最佳方法是:
def save(self, *args, **kwargs):
if self.feed_image = None:
self.feed_image = something?
super(BlogPage, self).save(*args, **kwargs)
如果是,something?
图片网址的预期输入是什么?
或者在ForeignKey
上设置默认值更清晰,例如:
feed_image = models.ForeignKey(
'wagtailimages.Image',
null=True,
blank=True,
default=something?
on_delete=models.SET_NULL,
related_name='+'
)
如果是的话,something?
的预期格式是什么?
我知道这个逻辑可以在模板中完成,但它会干扰,如果可能的话,我希望它能在模型中完成。 谢谢!
答案 0 :(得分:1)
这个东西应该是一个wagtailimages.Image对象。
self.feed_image = Image.objects.first()
但是因为feed_image是ForeignKey字段,所以只有id存储在数据库中。所以这也会起作用(假设有一个具有该id的对象):
self.feed_image_id = 1
最后,我想指出您正在混合代码和内容!这总是一个坏主意。如果有人删除您的默认图片怎么办?最好删除自定义保存方法,将图像字段留空并使用静态文件夹中的文件。在模板中执行以下操作:
{% if object.feed_image %}
// Your image tag here.
{% else %}
<img src={% static 'images/default.jpg' %}>
{% endif %}
答案 1 :(得分:1)
您只需在None
上保存feed_image
,然后创建一个get
方法,该方法将返回您的默认图片,如下所示:
if self.feed_image:
return self.feed_image
return something?