形式的笑脸另存为????在数据库中

时间:2018-06-29 05:54:10

标签: django django-forms mariadb

在我的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),但是保存后得到了相同的????

所以问题是如何在不损害表单安全性的情况下正确保存表情符号?

1 个答案:

答案 0 :(得分:2)

感谢这次answer添加

'OPTIONS': {'charset': 'utf8mb4'},

到settings.py DATABASE选项并将字段排序规则设置为utf8mb4解决了该问题。