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

django/wagtail model - if ForeignKey wagtailimages.Image field is saved blank, then save default

我正在为 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='+'
    )

save() 上设置 ForeignKey 的最佳方法是:

def save(self, *args, **kwargs):
    if self.feed_image = None:
        self.feed_image = something?
    super(BlogPage, self).save(*args, **kwargs)

如果是,something? 图像的预期输入是什么 url?

或者在 ForeignKey 上设置默认值是否更清晰,例如:

feed_image = models.ForeignKey(
    'wagtailimages.Image',
    null=True,
    blank=True,
    default=something?
    on_delete=models.SET_NULL,
    related_name='+'
)

如果是,那么 something? 的预期格式是什么?

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

东西应该是 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 %}

您只需将 None 保存在您的 feed_image 上,然后创建一个 get 方法来 return 您的默认图片,就像这样:

if self.feed_image:
   return self.feed_image
return something?