【发布时间】:2020-07-30 22:44:16
【问题描述】:
我正在创建一种仪表板,当它完成后,将允许用户 (1) 上传个人资料图片,(2) 输入自己的显示名称,以及 (3) 编辑和更改他们的个人资料图片作为他们想要的显示名称。
https://github.com/pmahalan/Avybe_Database_Project
我已经构建了前端(模板和视图),并且已经构建了模型。我将模型标记为“创建者”,就像在内容创建者中一样 - 与之关联的两个对象是“名称”(对应于他们的显示名称)和“上传”(对应于他们的图片)。
我还有与提交和上传按钮相关联的 URL 路径,点击后会起作用。
但是,在输入新用户名或上传新图片后点击提交仍然不会真正更改此人的信息。如果我个人通过 Django Admin 进行更改,我可以更改信息,仅此而已。我希望前端用户能够通过输入和单击“提交”按钮有效地更改它。
我是否在我的 views.py 文件中创建 Django?我是创建两个单独的表单(一个用于显示名称,一个用于个人资料图片),还是只创建一个?从那里,我如何将它传递给我的模板?是否需要一个“if”语句来判断是 POST 还是 GET 请求?
我的意见.py:
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import *
def home(request):
creators = Creator.objects.all()
return render(request, 'accounts/dashboard.html', {'creators': creators})
def changeName(request):
context = {}
return render(request, 'accounts/dashboard.html', context)
def uploadPic(request):
context = {}
return render(request, 'accounts/dashboard.html', context)
我的 urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home),
path('update_name/', views.changeName, name="update_name"),
path('upload_pic/', views.uploadPic, name="upload_pic"),
]
我的模板(dashboard.html):
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<meta charset="utf-8">
<title>Avybe Creator Dashboard</title>
</head>
<body>
<p class="row" style="padding-left: 60px;"> </p>
<!-- Deliberatley empty space -->
<h1 class="row" style="padding-left: 60px;">Welcome to your Avybe Creator Dashboard!</h1>
<p class="row" style="padding-left: 60px;"> </p>
<!-- Deliberatley empty space -->
<form action="" method="POST" class="row" style="padding-left: 60px;" enctype="multipart/form-data">
{% csrf_token %}
Upload a Profile Picture:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit" href="{% url 'upload_pic' %}">
</form>
<p class="row"> </p>
<!-- Deliberatley empty space -->
<p class="row" style="padding-left: 60px;">Your current displayname is:
{% for i in creators %}
{{i.name}}
{% endfor %}
</p>
<p class="row" style="padding-left: 60px;"> </p>
<!-- Deliberatley empty space -->
<form action="" method="POST" class="row" style="padding-left: 60px;">
{% csrf_token %}
<label for="publicname">Edit your displayname: </label>
<input type="text" id="publicname" name="publicname" value="ExampleName">
<input type="submit" value="Submit" href="{% url 'update_name' %}">
</form>
</body>
</html>
我的模特:
from django.db import models
# Create your models here.
class Creator(models.Model):
name = models.CharField(max_length=200, null=True)
upload = models.ImageField(blank=True, null=True)
【问题讨论】:
-
确保输入元素内的名称属性与该输入通知的字段名称相同。
标签: django django-rest-framework django-forms user-input crud