python - 如何在我的个人字段中自动为用户设置外键集
问题描述
这是我的意见.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")
这是我的forms.py
from django import forms
from django.forms import ModelForm
from .models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
这是我的models.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
如何将人员设置为当前登录的用户 ID...???我想将用户 ID 保存到该外键,这样如果我删除用户,那么该用户的个人资料也将被删除
网址.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
是 User 的字段,但您编写的视图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 在你的 url 中传递用户 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 %}
...
推荐阅读
- python - 计算一个整数有多少个因数
- sql - 我尝试对列进行定界并将其数值相乘以获得平方英尺面积,但它不起作用,有人可以纠正我吗
- r - R:R中的“同步”图
- javascript - 手风琴打开/关闭所有部分
- coldfusion - 如何使用 CFIMAP 或 CFPOP 从已删除邮件文件夹中删除电子邮件
- sql - ANSI SQL:基于特定字符将列值拆分为行
- c# - 如何使用 google drive API V3 以 txt 或 doc 格式打开 jpg
- react-native - run-ios 和 run-android 命令失败
- rust - 如何从 Rust 的闭包中跳过循环迭代?
- git - 有没有办法告诉 git 哪些行在差异中被视为已修改?