前提・実現したいこと
DjangoのAdminサイトに設置したMarkdownFieldにドラッグアンドドロップした画像ファイルをcloudinaryにアップロードし、参照先のURLと自動で紐づけたい。
発生している問題・エラーメッセージ
MarkdownFieldにドラッグアンドドロップした画像ファイルをcloudinaryにアップロードすると、「_****」とユニークファイル名になるようにランダムなIDが割り振られるが、markdownxではそれを認識できない。
該当のソースコード
- admin.py
python
1from django.contrib import admin 2from markdownx.admin import MarkdownxModelAdmin 3from blog.models import Category, Tag, Post 4 5admin.site.register(Category) 6admin.site.register(Tag) 7admin.site.register(Post,MarkdownxModelAdmin)
- models.py
python
1from django.db import models 2from django.utils import timezone 3from markdownx.models import MarkdownxField 4from markdownx.utils import markdownify 5 6class Post(models.Model): 7 category = models.ForeignKey(Category, on_delete=models.PROTECT) 8 tags = models.ManyToManyField(Tag, blank=True) 9 title = models.CharField(max_length=255) 10 image = models.ImageField(upload_to='post_images/', null=True, blank=True) 11 content = MarkdownxField(help_text='markdownで記述できます。') 12 description = models.TextField(blank=True) 13 created_at = models.DateTimeField(auto_now_add=True) 14 updated_at = models.DateTimeField(auto_now=True) 15 published_at = models.DateTimeField(blank=True, null=True) 16 is_public = models.BooleanField(default=False) 17 18 class Meta: 19 ordering = ['-created_at'] 20 21 def save(self, *args, **kwargs): 22 if self.is_public and not self.published_at: 23 self.published_at = timezone.now() 24 super().save(*args, **kwargs) 25 26 def __str__(self): 27 return self.title 28 29 def markdown(self): 30 return markdownify(self.content)
- View.py
python
1class PostDetailView(DetailView): 2 model = Post 3 4 def get_object(self, queryset=None): 5 obj = super().get_object(queryset=queryset) 6 if not obj.is_public and not self.request.user.is_authenticated: 7 raise Http404 8 return obj
- requirements.txt
txt
1Django==3.0.4 2cloudinary==1.20.0 3django-markdownx==3.0.1
試したこと
- adminサイトのImageFieldからは正常にアップロードでき、参照先も正常でした。(「_****」も認識)
- 上記が正常だったため、おそらくmarkdownxが読み込む参照先がおかしくなってしまったのだと思うのですが、回避策がわかりませんでした。
あなたの回答
tips
プレビュー