问题描述
这是我的views.py
@login_required(login_url='/login')
def user_edit(request,user_id):
if request.method == 'POST':
user = User.objects.get(id=user_id)
form = ProfileForm(request.POST or None,instance=user)
if form.is_valid():
i = form.save(commit=False)
i.user = request.user
i.save()
return redirect('list')
else:
form = ProfileForm()
return render(request,"home/intro.html",{'form': form})
else:
return render(request,"home/intro.html")
这是我的表格。py
from django import forms
from django.forms import ModelForm
from .models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
这是我的模特。py
from django.contrib.auth.models import User
from django.db import models
class Profile(models.Model):
img = models.ImageField(upload_to='imgs/')
about = models.TextField(max_length=255,null=False)
phnum = models.IntegerField()
uname = models.CharField(max_length=255,null=False)
person = models.ForeignKey(User,on_delete=models.CASCADE,null=True)
def __str__(self):
return self.about
我如何将person设置为当前登录的用户ID ... ??? 我想将用户ID保存到该外键,以便如果我删除用户,那么该用户的个人资料也将被删除
urls.py
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('',views.home,name="home"),path('signup/',views.user_crete,name="signup"),path('login/',views.user_login,name="login"),path('logout/',views.user_logout,name="logout"),path('edit/',views.user_edit,name="edit"),path('list/',views.user_list,name="list"),]+ static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
模板
{% extends 'base.html' %}
{% block content %}
<h2 class="text-center mt-2">Setup Your Profile</h2>
<div class="col-md-6 offset-md-3">
<form class="mt-2" method="post" action="{% url 'edit' %}" enctype="multipart/form-data">{% csrf_token %}
<div class="form-group">
<label>Uname</label><br>
<input type="text" class="form-control" placeholder="{{ user.username }}" name="uname" value="{{ user.username }}" readonly>
</div>
<div class="form-group">
<label>Profile Picture</label><br>
<input type="file" name="img">
</div>
<div class="form-group">
<label>About Your Self</label><br>
<input type="textBox" class="form-control" placeholder="Write about yourself" name="about">
</div>
<div class="form-group">
<label>Phone Number</label><br>
<input type="number" class="form-control" placeholder="Enter your Number" name="phnum">
</div>
<center><button type="submit" class="btn btn-primary">Edit</button></center>
</form>
</div>
{% endblock %}
我在其中创建了特定用户的个人资料的位置添加了模板,还添加了urls.py文件以覆盖更多大陆
解决方法
在模型中,person
是用户的字段,但是您写的视图i.user
应该写i.person
:
@login_required(login_url='/login')
def user_edit(request,user_id):
if request.method == 'POST':
user = User.objects.get(id=user_id)
form = ProfileForm(request.POST or None,instance=user)
if form.is_valid():
i = form.save(commit=False)
i.person = request.user # change here
i.save()
return redirect('list')
else:
form = ProfileForm()
return render(request,"home/intro.html",{'form': form})
else:
return render(request,"home/intro.html")
urls.py 在您的网址中传递用户ID
path('edit/<int:user_id>/',views.user_edit,name="edit"),
模板
通过user.id
采取行动
<form class="mt-2" method="post" action="{% url 'edit' user.id %}" enctype="multipart/form-data">
{% csrf_token %}
...