django - 如何自定义平面页面以与 django-oscar get_model 一起使用
问题描述
不幸的是,经过无数次尝试,我还没有找到任何有希望的解决方法。
我正在寻找一种最少侵入性的方式来自定义 django-oscar 的“dashboard.pages”应用程序使用的平面页面。可以打破 django 应用程序的迁移历史并手动管理它们。
是否可以使用 oscar 的 get_model 加载器来解决它以及如何解决? (我不需要完整的解决方案,并感谢每一个提示)
附加信息:
我的意图是创建一个 FlatPageCategory 模型
from oscar.core.utils import slugify
class FlatPageCategory(models.Model):
name = models.CharField(max_length=255, db_index=True)
url = models.SlugField()
并向 FlatPage 模型添加一些字段
from django.contrib.flatpages.models import FlatPage
class FlatPage(FlatPage):
display_order = models.SmallIntegerField(
default=0,
)
category = models.ForeignKey(
'FlatPageCategory',
on_delete=models.SET_NULL,
blank=True, null=True,
)
attachments = models.ManyToManyField(
File,
)
def get_absolute_url(self):
""" Prepend category url if category exists. """
url = super().get_absolute_url()
if self.category:
return f'{self.category.url}/{url}'
return url
解决方案
在尝试了不同的方法之后,这是我的解决方案:从自定义页面模型创建 OneToOne-Relationship 到 FlatPage 以及从 Attachment 到 FlatPage 的 ForeignKey。
class Attachment(models.Model):
flatpage = models.ForeignKey(
FlatPage,
related_name='attachments',
on_delete=models.CASCADE,
)
title = models.CharField(
max_length=250,
)
file = models.FileField(
_('File'),
upload_to='page_attachments/'
)
class Page(models.Model):
""" This is passed to the template context to build menu and urls """
flatpage = models.OneToOneField(
FlatPage,
related_name='page',
on_delete=models.CASCADE,
)
category = models.PositiveSmallIntegerField(
_('Category'),
choices=Category.choices,
default=Category.UNDEFINED,
)
priority = models.SmallIntegerField(
_('Priority'),
default=0,
)
您可以在GitHub-Project中找到此实现的源代码。
这并不是我真正想要并在问题中提出的解决方案,因此我认为这个问题应该保持开放。
推荐阅读
- google-apps-script - 使用 WorkBook 中另一个电子表格中的 =UNIQUE - Google Apps 脚本
- mysql - 如何在 macOS 上的 MariaDB 10.4 中设置 root 密码?
- python - 图像未关闭,因为功能仍在使用它
- powerbi - 如何在power bi图表中将滚动条保持在右侧
- python - 为什么我在显示功能后没有打印出来?
- python - Python:将第一列与其他两列相关联
- sql - 减少 SQL 查询中的小数位数
- java - 像 MS Paint 一样画直线
- php - Laravel 5.8.x(带有 AdminLTE)不显示闪信息
- java - 使用java从xml文件中读取html标签