我试图在 django 中应用 crud 但得到了这个预期的字符串或类似字节的对象错误

i trying to apply crud in django but got this expected string or bytes-like object error

我在 Django 中进行 CRUD 操作,但 editing/updateing 用户遇到错误。 这是我的 models.py

 # -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""

from django.db import models
from django.contrib.auth.models import User
#from __future__ import unicode_literals
from django.db import models


# Create your models here.
class Member(models.Model):
    username = models.CharField(max_length=40, blank=False)
    email = models.EmailField(max_length = 40, blank = False)
    mobile_number = models.CharField(max_length=10, blank=True)
    location = models.TextField(max_length=255, blank=False)
    date = models.DateField('%m/%d/%Y')
    created_at = models.DateTimeField('%m/%d/%Y %H:%M:%S')
    updated_at = models.DateTimeField('%m/%d/%Y %H:%M:%S')

这是 views.py 文件

`# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect
from django.template import loader
from django.http import HttpResponse
from django import template
from django.contrib.auth.decorators import login_required
from .models import Member
import datetime
from django.core.exceptions import ValidationError
from django.contrib import messages
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


@login_required(login_url="/login/")
def index(request):
    
    context = {}
    context['segment'] = 'index'

    html_template = loader.get_template( 'index.html' )
    return HttpResponse(html_template.render(context, request))

@login_required(login_url="/login/")
def pages(request):
    context = {}
    # All resource paths end in .html.
    # Pick out the html file name from the url. And load that template.
    try:
        
        load_template      = request.path.split('/')[-1]
        context['segment'] = load_template
        
        html_template = loader.get_template( load_template )
        return HttpResponse(html_template.render(context, request))
        
    except template.TemplateDoesNotExist:

        html_template = loader.get_template( 'page-404.html' )
        return HttpResponse(html_template.render(context, request))

    except:
    
        html_template = loader.get_template( 'page-500.html' )
        
@login_required
def create(request):
    if request.method == 'POST':
        member = Member(
            username=request.POST['username'],
            email = request.POST['email'],
            mobile_number=request.POST['mobile_number'],
            location=request.POST['location'],
            date=request.POST['date'],
            created_at=datetime.datetime.now(),
            updated_at=datetime.datetime.now(), )
        try:
            member.full_clean()
        except ValidationError as e:
            pass
        member.save()
        messages.success(request, 'Member was created successfully!')
        return redirect('/list')
    else:
        return render(request, 'add.html')
    
            
        return HttpResponse(html_template.render(context, request))
        
@login_required
def list(request):
    members = Member.objects.all()
    return render(request, 'list.html', {'members': members})

@login_required
def edit(request, id):
    members = Member.objects.get(id=id)
    context = {'members': members}
    return render(request, 'edit.html', context)


@login_required
def update(request, id):
  
    member = Member.objects.get(id=id)
    member.username = request.POST.get('username'),
    member.mobile_number = request.POST.get('mobile_number'),
    member.description = request.POST.get('description'),
    member.location = request.POST.get('location'),
    member.date = request.POST.get('date', False),
    member.save()
    messages.success(request, 'Member was updated successfully!')
    return redirect('/list')
    `

这是urls.py

from django.urls import path, re_path
from app import views
from . import views
from django.conf.urls import url

urlpatterns = [

    # The home page
    path('', views.index, name='home'),
    url(r'^$', views.index, name='index'),
    url(r'^create$', views.create, name='create'),
    url(r'^list$', views.list, name='list'),
    url(r'^edit/(?P<id>\d+)$', views.edit, name='edit'),
    url(r'^edit/update/(?P<id>\d+)$', views.update, name='update'),
    
]

这是 edit.html 文件

{% extends 'layout/app.html' %}

{% load static %}

{% block body %}
    <div id="content-wrapper">

        <div class="container-fluid">
            <!-- Breadcrumbs-->
            <ol class="breadcrumb">
                <li class="breadcrumb-item">
                    <a href="#">CRUD</a>
                </li>
                <li class="breadcrumb-item active">Add</li>
            </ol>
            <div class="card mb-3">
                <div class="card-header">
                    <i class="fas fa-table"></i>
                    Crud Add
                </div>
                <div class="card-body">
                    <form class="form-horizontal" action="update/{{ members.id }}" method="POST">
                    {% csrf_token %}
                    <div class="form-group">
                        <div class="form-row">
                            <div class="col-md-6">
                                <div class="form-label-group">
                                    <input type="text" class="form-control" value="{{ members.username }}" name="username" placeholder="User Name" id="inputUser" required>
                                    <label for="inputUser">Username</label>
                                </div>
                            </div>
                            
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="form-row">
                            <div class="col-md-6">
                                <div class="form-label-group">
                                    <input type="text" class="form-control" value="{{ members.email }}" name="email" placeholder="email" id="inputemail" required>
                                    <label for="inputemail">Email</label>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-label-group">
                                    <input class="form-control" type="tel" value="{{ members.mobile_number }}" name="mobile_number" placeholder="Mobile Number" id="inputMobile">
                                    <label for="inputMobile">Mobile Number</label>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="form-row">
                        <div class="col-md-6">
                                <div class="form-label-group">
                                    <input type="text" id="inputLoca" class="form-control" value="{{ members.location }}"  placeholder="Enter Location" required="">
                                    <label for="inputLoca">Enter Location</label>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="form-label-group">
                                    <input class="form-control" type="date" name="date" value="{{ members.date }}" id="dateInput">
                                    <label for="dateInput">Enter Date</label>
                                </div>
                            </div>
             
                        </div>
                    </div>
                    <button class="btn btn-primary btn-block" type="submit">Submit &nbsp;&nbsp;&nbsp;<span></span></button>
                </form>
                </div>
            </div>
        </div>
    </div>
{% endblock %}
{% block javascript %}

{% endblock %}

我已经很努力地克服这个错误,应用了很多解决方案,但无法解决这个错误。 错误是:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
February 27, 2021 - 12:25:24
Django version 2.2.10, using settings 'core.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Internal Server Error: /edit/update/1
Traceback (most recent call last):
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/app/views.py", line 95, in update
    member.save()
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/base.py", line 740, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/base.py", line 777, in save_base
    updated = self._save_table(
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/base.py", line 850, in _save_table
    updated = self._do_update(base_qs, using, pk_val, values, update_fields,
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/base.py", line 900, in _do_update
    return filtered._update(values) > 0
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/query.py", line 760, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1462, in execute_sql
    cursor = super().execute_sql(result_type)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1120, in execute_sql
    sql, params = self.as_sql()
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1428, in as_sql
    val = field.get_db_prep_save(val, connection=self.connection)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 793, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepared=False)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1279, in get_db_prep_value
    value = self.get_prep_value(value)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1274, in get_prep_value
    return self.to_python(value)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1236, in to_python
    parsed = parse_date(value)
  File "/home/danish-khan/django_drf/django-dashboard-gradientable/env/lib/python3.8/site-packages/django/utils/dateparse.py", line 74, in parse_date
    match = date_re.match(value)
TypeError: expected string or bytes-like object
[27/Feb/2021 12:25:26] "GET /edit/update/1 HTTP/1.1" 500 139040

我不知道这个错误是什么意思'unexpected string or bytes-like object' 也许这个错误是在提交日期但未确认。 错误出在我尝试更新用户数据时的更新函数中。

你能打印你的 request.POST 并显示结果吗? 此外,在更新模型时,最好使用更新方法。用法如下

Member.objects.filter(id=id).update(username = request.POST.get('username'),mobile_number = request.POST.get('mobile_number'),description = request.POST.get('description'),location = request.POST.get('location'),date = request.POST.get('date', False))

而且您之后不需要保存(),更新方法会为您完成。

我敢打赌它不喜欢你传入的日期,因为它很可能是以字符串的形式传给你的。

您可以(阅读应该)通过使用表单并遵循文档中的常规表单处理模式来消除很多此类问题 (https://docs.djangoproject.com/en/3.1/topics/forms/#working-with-forms). Pay particular attention to the suggested pattern for validation in the view (https://docs.djangoproject.com/en/3.1/topics/forms/#the-view)。

如果您不想这样做,您可以采用发布的日期字符串,然后使用 strptime 将其转换为日期时间对象(有关快速操作方法,请参阅 https://www.educative.io/edpresso/how-to-convert-a-string-to-a-date-in-python)。您可能会遇到的问题是,您永远无法确定该日期字符串将如何传递给您。

您可能还希望查看 DateTimeField (https://docs.djangoproject.com/en/3.1/ref/models/fields/#datefield) 的 auto_nowauto_now_add 参数。管理这些 created_atupdated_at 字段的方法更简单。