В моем приложении Django и базе данных MariaDB, когда пользователи публикуют форму, содержащую смайлики типа ?
, смайлик сохраняется как ????
, что явно не предназначено.
Функция в представлениях:
# -*- coding: utf-8 -*-
def send_letter(request):
args = {}
if request.method == 'POST':
form = SendLetterForm(request.POST)
if form.is_valid():
d = form.save(commit = False)
try:
author = get_user(request)
except:
author = 'Guest'
d.title = form.cleaned_data['title']
d.body = form.cleaned_data['body']
d.published = False
d.save()
Модель, которая используется для создания формы:
class SendLetter(models.Model):
author = models.ForeignKey(User, blank=True, null=True)
title = models.CharField(max_length=100, blank=False)
body = models.TextField(blank=False)
created = models.DateTimeField(default=datetime.datetime.now)
published = models.BooleanField(default= False, blank=True)
Форма:
class SendLetterForm(forms.ModelForm):
class Meta():
model = SendLetter
exclude = ('author','created', 'published')
Сортировка таблицы установлена на utf8mb4_bin
, текст на персидском языке. Я также безуспешно пробовал другие сопоставления utf8, например utf8_persian_cli
. У меня нет проблем с сохранением персидского текста без смайликов.
Когда я вставляю текст, содержащий смайлики, прямо в поле таблицы, используя PhpMyAdmin, смайлики сохраняются правильно.
Я также пробовал d.body = form ['body'] (без cleaned_data
), но получил тот же ????
после сохранения.
Итак, вопрос в том, как правильно сохранить смайлики, не ставя под угрозу безопасность формы?