python - Django 模型无法识别 MarkdownxFormField 字段
问题描述
我正在尝试为markdownx
我的模型添加支持,这将允许从管理面板进行预览编辑。但是,一旦我将我的content
字段从django 更改models.FileField
为MarkdownXFromField()
迁移时删除内容字段并忽略它,就好像它根本不是模型的一部分。
我完全遵循了这些文档,但它不起作用。
我也跑了collectstatic
。
# models.py
from os.path import splitext
from uuid import uuid4
from django.db import models
from markdownx.fields import MarkdownxFormField
def hashImageFilename(instance, name):
ext = splitext(name)[1]
return "images/{}{}".format(uuid4(), ext)
class Article(models.Model):
title = models.CharField(("title"), max_length=100)
content = MarkdownxFormField()
description = models.TextField(("description"), default='')
uploadDate = models.DateTimeField(("uploadDate"), auto_now=True)
lastModified = models.DateTimeField(("uploadDate"), auto_now=True)
publicationDate = models.DateField("publicationDate")
image = models.ImageField("image", upload_to=hashImageFilename)
def __str__(self):
return self.title
# urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf.urls import url
from django.conf import settings
from markdownx import urls as markdownx
urlpatterns = [
path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls')),
path('api/articles/', include('articles.api.urls')),
url(r'^markdownx/', include('markdownx.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# admin.py
from django.contrib import admin
# Register your models here.
from markdownx.admin import MarkdownxModelAdmin
from .models import Article
admin.site.register(Article, MarkdownxModelAdmin)
# settings.py
INSTALLED_APPS = [
#...
'markdownx'
]
解决方案
您将表单字段与模型字段混淆了。您应该将模型重写为:MarkdownxFormField
MarkdownxField
# models.py
from os.path import splitext
from uuid import uuid4
from django.db import models
from markdownx.models import MarkdownxField
def hashImageFilename(instance, name):
ext = splitext(name)[1]
return "images/{}{}".format(uuid4(), ext)
class Article(models.Model):
title = models.CharField(("title"), max_length=100)
content = MarkdownxFormField()
description = models.TextField(("description"), default='')
uploadDate = models.DateTimeField(("uploadDate"), auto_now=True)
lastModified = models.DateTimeField(("uploadDate"), auto_now=True)
publicationDate = models.DateField("publicationDate")
image = models.ImageField("image", upload_to=hashImageFilename)
def __str__(self):
return self.title
MarkdownxFormField
用于表单,因此它将使用特定的小部件等呈现。为了将内容存储在数据库中,您需要一个模型字段。
推荐阅读
- c# - LINQ Query 加入 2 个不同的表
- c - fgets() 在文件读取中得到的比它应该得到的多 - C
- python - 将 matplotlib 双轴网格线保留在先前绘制的系列下
- javascript - 如何向我的 Google 自定义搜索框添加占位符?
- azure-iot-hub - 快速入门指南失败 - AZ3166 无法连接到 Azure IoT 中心
- r - 使用环视刮取数据的正则表达式不起作用
- c++ - openmp c ++中并行块内lambda函数的奇怪行为
- python - 为什么这个 JSON 文件不能用 __dict__ = json.load(f) 解析到我的对象中?
- python-3.x - 寻找多个节点之间的最短路径(不仅仅是距离)
- laravel - 此集合实例 Laravel 上不存在属性 [照片]