python - Django 将方括号和引号添加到 charfield 输入
问题描述
最近我的 Django 表单遇到了一个相当奇怪的问题。我目前正在处理我的待办事项列表项目。一切正常,除了每当我添加一个新任务时,它的标题似乎保存在数据库中,并带有额外的方括号和引号。它看起来像一个元素列表,但它是一个字符串。我通过显示数据库中字符串的 silced 版本解决了这个问题,但它仍然显示,例如在编辑任务时。希望有人知道会发生什么?
模型.py:
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=35)
completed = models.BooleanField(default=False)
created_date = models.DateTimeField(auto_now_add=True)
# added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
author = models.CharField(max_length=50, default='')
def __str__(self):
return self.title
表格.py:
from django import forms
from .models import *
class TaskForm(forms.ModelForm):
class Meta:
model = Task
fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'new_task_text', 'placeholder': 'Add new task'}),
}
class TaskEditForm(forms.ModelForm):
class Meta:
model = Task
fields = ['title', 'completed']
widgets = {
'title': forms.TextInput(attrs={'class': 'new_task_text'}),
}
视图.py:
from django.shortcuts import render, redirect
from .forms import *
from django.contrib.auth.decorators import login_required
@login_required
def list_homepage(request):
tasks = Task.objects.filter(author=request.user.username)
for task in tasks:
if "['" and "']" in task.title:
task.title = task.title[2:-2] # CharField returns a string that is looking like one-element list. Have no idea why yet.
# try using form instead of modelform.
form = TaskForm()
if request.method == 'POST':
form = TaskForm({**request.POST, **{'author': request.user.username}})
if form.is_valid():
form.save()
else:
print(form.errors)
return redirect('/list/home')
context = {
'page_title': 'Todo list',
'tasks': tasks,
'form': form,
}
return render(request, 'tasks/list.html', context)
@login_required
def update_task(request, pk):
task = Task.objects.get(id=pk)
form = TaskEditForm(instance=task)
if request.method == 'POST':
form = TaskEditForm(request.POST, instance=task)
if form.is_valid():
form.save()
return redirect('../..')
context = {
'form': form,
'page_title': 'Update task',
}
return render(request, 'tasks/update_task.html', context)
@login_required
def delete_task(request, pk):
task = Task.objects.get(id=pk)
if request.method == 'POST':
task.delete()
return redirect('/list')
context = {
'page_title': 'Delete task',
'task': task,
}
return render(request, 'tasks/delete_task.html', context)
列表.html:
{% extends 'tasks/base.html' %}
{% block content %}
<div class="new-task-column">
<form method="POST", action="#"> {% csrf_token %}
{{ form.title }}
<input class="submit" type="submit", value="Create task">
</form>
</div>
<div class="task-column">
{% for task in tasks %}
<div class="item-row">
<div class="task">
{% if task.completed == True %}
<s>{{ task }} </s>
{% else %}
{{ task }}
{% endif %}
</div>
<div class="del_upd_container">
<div class="single-upd-container"><a class="edit_button" href="/list/update_task/{{ task.id }}">Update</a></div>
<div class="single-del-container"><a class="edit_button" href="/list/delete_task/{{ task.id }}">Delete</a></div>
</div>
</div>
{% endfor %}
</div>
{% endblock content %}
update_task.html:
{% extends 'tasks/base.html' %}
{% block content %}
<div class="new-task-column">
<form method="POST"> {% csrf_token %}
<span class="update-task-layout">
{{ form }}
<input class="submit" type="submit" name="Update item">
</span>
</form>
</div>
{% endblock content %}
非常感谢您的帮助,我真的很感激!
解决方案
有同样的问题,通过使用将's 的怪异类型(QueryDict)转换为普通字典的方法dict()
来解决它。request.POST
其余代码,例如save()
方法,可能需要稍作调整。
推荐阅读
- kubernetes - 在工作节点和控制平面之间引入代理后,Kubernetes 工作节点处于 NotReady 状态
- webhooks - 如何将函数应用与 SharePoint webhook 一起使用?
- angular - ng2-completer 选择事件未在鼠标单击时触发
- drools - 如何遍历drools决策表中的对象列表?
- ios - 使用 PaypalSDK iOS 导航颜色在 iOS 中未更改
- python - 套接字IO。在命名空间上不起作用
- jboss - JBoss 7.2 的 JMS 服务器问题
- reactjs - 如何将数据附加到现有的 json
- ios - 如何在 xcode11 上安装 IOS 12.4.4 模拟器
- mysql - 如何比较两个表中的某个列并将匹配的记录插入到新表中?