Python 未通过模板更新视图在Django中存储和获取图像文件

Python 未通过模板更新视图在Django中存储和获取图像文件,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,views.py: from django.shortcuts import render, redirect from django.http import HttpResponse, JsonResponse from .models import Project, Task from .forms import ProjectForm, TaskForm from django.views.generic import (TemplateView,ListView,DetailView,C

views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from .models import Project, Task
from .forms import ProjectForm, TaskForm
from django.views.generic import (TemplateView,ListView,DetailView,CreateView,UpdateView,DeleteView)
# Create your views here.

def index(request):
    projects = Project.objects.all()
    print("projects: ", projects)
    form = ProjectForm()
    
    if request.method == 'POST':
        form = ProjectForm(request.POST)

        if form.is_valid():
            form.save()
        else:
            print(form.errors)
        return redirect('/')

    context = {'projects': projects, 'form': form}
    return render(request, 'projects/list_project.html', context)

class ProjectDetailView(DetailView):
    model = Project

def updateProject(request, pk):
    project_inst = Project.objects.get(id=pk)

    form = ProjectForm(instance=project_inst)

    if request.method == 'POST':
        form = ProjectForm(request.POST, instance=project_inst)
        if form.is_valid():
            form.save()
        return redirect('/')

    context = {'form': form}
    return render(request, 'projects/update_project.html', context)

models.py

from django.db import models
from django.utils import timezone
from django.urls import reverse
from django.conf import settings

# Create your models here.

def upload_project_image(instance, filename):
    return "todoapp/files/{filename}".format(filename=filename)

class Project(models.Model):
    title = models.CharField(max_length=200, unique=True)
    description = models.TextField(null=True, blank=True)
    image = models.ImageField(upload_to=upload_project_image, null=True, blank=True)
    duration = models.DurationField(null=True, blank=True)
    created_date = models.DateTimeField(auto_now_add=True)

    def get_absolute_url(self):
        return reverse("project_detail",kwargs={'pk':self.pk})
    
    def __str__(self):
        return self.title

class Task(models.Model):
    STATUS= (
        ('New', 'New'),
        ('Assigned', 'Assigned'),
        ('Selected For Development', 'Selected For Development'),
        ('In Progress', 'In Progress'),
        ('Blocked', 'Blocked'),
        ('Completed', 'Completed'),
    )

    title = models.CharField(max_length=200)
    description = models.TextField()
    project = models.ForeignKey(Project, related_name='tasks', on_delete=models.CASCADE)
    created_date = models.DateTimeField(default=timezone.now)
    current_status = models.CharField(max_length=50, choices=STATUS, default='New')

    def get_absolute_url(self):
        return reverse("project_detail",kwargs={'pk':self.pk})

    def __str__(self):
        return self.title
settings.py:

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'), ) 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
project_detail.html

<!DOCTYPE html>
<html>
<head>
    <title>Project Detail</title>
</head>
<body>
    Project Title: {{project.title}} <br>
    Project Description: {{project.description}} <br>
    Project Image: {{project.image.url}}
    Project Duration: {{project.duration}} <br>
    Project Created Date: {{project.created_date}} <br>

    <h4>Tasks:</h4>

    {% for task in project.tasks.all %}
        Task Title: {{task.title}}  <br>
        Task Description: {{task.description}} <br>
        Task Current Status: {{task.current_status}} <br>
        Task Created Date: {{task.created_date}} <br> <br>

    {% endfor %}

</body>
</html>


项目细节
项目名称:{{Project.Title}}
项目描述:{{Project.Description}}
项目映像:{{Project.Image.url} 项目工期:{{Project.Duration}}
项目创建日期:{{Project.Created_Date}}
任务: {project.tasks.all%中的任务的%s} 任务标题:{{Task.Title}}
任务描述:{{Task.Description}}
任务当前状态:{{Task.Current_Status}}
任务创建日期:{{Task.Created_Date}}

{%endfor%}
更新_project.html

<h3>Update Project</h3>
<form method="POST" action="" enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" name="Update Project">
</form>
<!DOCTYPE html>
<html>
<head>
    <title>List View of Projects</title>
</head>
<body>
    <h2>To Do</h2>

    <form method="POST" action="/" enctype="multipart/form-data">
        {{form.title}}
        {% csrf_token %}
        <input type="submit" name="Create Task">
    </form>

    {% for project in projects %}
        <div>
            <a href="{% url 'update_project' project.id %}">Update</a>
            <a href="{% url 'delete_project' project.id %}">Delete</a>
            <p>{{project.title}}</p>
        </div>
    {% endfor %}
</body>
</html>
更新项目
{%csrf_令牌%}
{{form.as_p}}
list_project.html

<h3>Update Project</h3>
<form method="POST" action="" enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" name="Update Project">
</form>
<!DOCTYPE html>
<html>
<head>
    <title>List View of Projects</title>
</head>
<body>
    <h2>To Do</h2>

    <form method="POST" action="/" enctype="multipart/form-data">
        {{form.title}}
        {% csrf_token %}
        <input type="submit" name="Create Task">
    </form>

    {% for project in projects %}
        <div>
            <a href="{% url 'update_project' project.id %}">Update</a>
            <a href="{% url 'delete_project' project.id %}">Delete</a>
            <p>{{project.title}}</p>
        </div>
    {% endfor %}
</body>
</html>

项目列表视图
做
{{form.title}
{%csrf_令牌%}
{项目%中的项目为%}
{{project.title}

{%endfor%}
URL.py:

from django.urls import path
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('', views.index, name='project_list_view'),
    path('update_project/<str:pk>/', views.updateProject, name='update_project'),
    path('delete_project/<str:pk>/', views.deleteProject, name='delete_project'),
    path('project_detail/<str:pk>/', views.ProjectDetailView.as_view(), name='project_detail')  
]
# urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += staticfiles_urlpatterns()
从django.url导入路径
从…起导入视图
从django.contrib.staticfiles.url导入staticfiles\u urlpatterns
从django.conf.url.static导入静态
从django.conf导入设置
URL模式=[
路径(“”,views.index,name='project\u list\u view'),
路径('update\u project/',views.updateProject,name='update\u project'),
路径('delete_project/',views.delete project,name='delete_project'),
路径('project\u detail/',views.ProjectDetailView.as\u view(),name='project\u detail')
]
#urlpatterns=urlpatterns+static(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
如果设置为.DEBUG:
urlpatterns+=静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
urlpatterns+=静态文件\u urlpatterns()
我对图像比较新。在尝试在
更新图像
屏幕中上载图像时,我正在从设备中选择一个文件,但我既没有收到错误,也没有收到按照
models.py中的路径存储在文件夹中的图像

有人能帮我吗