Django在方括号输入中添加方括号和引号

最近,我的Django表单遇到了一个很奇怪的问题。我目前正在做待办事项清单项目。一切正常,除了每当我添加新任务时,其标题似乎都保存在数据库中,并带有附加的方括号和引号。它看起来像一个元素列表,但它是一个字符串。我通过显示数据库中字符串的沉默版本来解决该问题,但是例如在编辑任务时它仍然显示。希望任何人都知道可能会发生什么?

models.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

forms.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'}),}

views.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','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)

list.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 %}

非常感谢您的帮助,我非常感谢!

wsxmn1214 回答:Django在方括号输入中添加方括号和引号

遇到了同样的问题,通过使用方法dict()request.POST的奇怪类型(QueryDict)转换为普通dict来解决它。其余代码(例如 save() 方法)可能需要稍作调整。

本文链接:https://www.f2er.com/2542051.html

大家都在问