django / wagtail模型 - 如果ForeignKey wagtailimages.Image字段保存为空白,则保存默认值

时间:2017-11-22 16:23:47

标签: django wagtail

我正在为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?的预期格式是什么?

我知道这个逻辑可以在模板中完成,但它会干扰,如果可能的话,我希望它能在模型中完成。 谢谢!

2 个答案:

答案 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?