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?
我正在为 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?