- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个“更新用户的个人资料”页面来让用户修改他们的个人资料,所以我想出了以下模型:
class Profile(models.Model):
user = models.OneToOneField(User)
nick_name = models.CharField(blank=True,max_length=100)
school = models.CharField(blank=True,max_length=100)
motto = models.CharField(blank=True,max_length=100)
class ProfileForm(ModelForm):
class Meta:
model = Profile
我的 View 设计为:
@login_required
def update_profile_view(request):
if request.method == 'POST':
user = request.user
try:
profile = user.get_profile()
except Exception:
profile = Profile.objects.create(user=user)
form = ProfileForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
profile.nick_name = cd['nick_name']
profile.school = cd['school']
profile.motto = cd['motto']
profile.save()
return HttpResponseRedirect('/main_page/')
else:
form = ProfileForm()
return render(request, 'update_profile.html', {'form':form})
用户和配置文件之间的关系显然是一对一的,通过请求我可以确定当前用户。因此不需要填写表单的用户字段。不幸的是,这无法通过“form.is_valid()”测试。在调用“is_valid”之前似乎很难修改表单。为简单起见,我不想创建自己的表单类,也不想编写自定义表单验证。还有其他方法可以解决这个问题吗?
最佳答案
您的 View 可以大大简化:
@login_required
def update_profile_view(request):
try:
profile = Profile.objects.get(user=request.user)
except Profile.DoesNotExist:
profile = None
form = ProfileForm(request.POST or None, instance=profile)
if request.method == 'POST':
if form.is_valid():
form.save()
return HttpResponseRedirect('/main_page/')
return render(request, 'update_profile.html', {'form':form})
无需像您一样手动分配字段。 Django ORM 知道如何自动执行插入和更新。因此,如果您只是将 Profile 的实例传递给 ProfileForm,它就会知道要进行更新。如果没有配置文件的实例,它将执行插入操作。
现在,如果您想在 UI 中透明地分配用户,您需要从表单中排除 user
字段并自行分配。有几种不同的方法可以做到这一点。
我还建议在您的重定向中利用 reverse
,这样您就没有硬编码的路径。
关于UserProfile 的 Django 表单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12006736/
我需要在 java 中添加一个用户配置文件变量,显然 %userprofile% 不起作用。当我尝试将其输入代码底部的目录时,它不接受它。但是我可以在命令行中回显我的 %userprofil% 用户配
我正在尝试将用户字段添加到用户配置文件管理选项卡中,以便能够在一个选项卡中更改每个用户属性。问题是 cmd 返回: 编辑:根据商王的评论编辑了代码,但仍然引发错误: : (admin.E202) 'a
我尝试导入 {{ user.userprofile. }} 和 {{ user.userprofile }} 没有成功。在 django shell 中,我可以使用 UserProfile.objec
我想获取桌面目录文件夹,所以我尝试了: char filename[ MAX_PATH ]; char newLocation[]="%userprofile%\\desktop\\myfil
在我的Yaml电话中,我有 --- title: "`r paste0('Test. Done ', format(Sys.Date(), '%B-%Y'))`" output: word_doc
我需要帮助将当前记录的 %USER% 添加到路径中,这是我目前的代码: DirectoryInfo dir = new DirectoryInfo(@"%USERPROFILE%\Local Sett
我想开始我的程序 start %USERPROFILE%\.myProgramm\myProgramm.exe 但现在我收到一条弹出消息,提示找不到文件夹 C:\Documets。这是由缺少省略号引起
我的代码正确吗?似乎可以编译但不能正常工作.. CString testing = _T(" --url=") + cstring + _T(" --out=%USERPROFILE%\\snapsh
所以我试图将我的文件保存到 C: 驱动器上的文档中。所以它允许我把它给别人,它会保存到他们的文档中。 我阅读了 %USERPROFILE% 的意思是抓取 C:\Users\%USERPROFILE%\
我正在尝试为用户创建一个小应用程序以获取联系人。我使用 django-profiles 作为我的个人资料的基础。现在一切正常,直到我尝试提交编辑联系表单并收到此错误。 Cannot assign ""
所以我用字段 score 扩展了我的用户。像这样: 模型.py: class UserProfile(models.Model): user = models.OneToOneField(Us
在.NET中,我们可以检索“特殊文件夹”的路径,例如文档/桌面等。今天我试图找到一种方法来获取“下载”文件夹的路径,但它看起来不够特别。 我知道我可以只执行“C:\Users\Username\Dow
我想创建一个“更新用户的个人资料”页面来让用户修改他们的个人资料,所以我想出了以下模型: class Profile(models.Model): user = models.OneToOne
我正在试验文件夹重定向,在设置它之后,我很快意识到任何具有环境变量(例如 %UserProfile%)的 VBS 脚本都变得不可用。 例如: C:\MD %UserProfile%\Desktop\
我尝试按照 https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#extending-the-existing-user-mod
我正在尝试运行 .save() 来更改用户模型字段的值。 这是我的代码: View .py: def traffic_task(request): tasks_traffic = Task.o
如果省略\My Documents\,以下函数将起作用,但我需要访问我的文档。 OpenTextFile("test.txt"); function OpenTextFile(file) {
我希望用户只能登录和注销,不能自己编辑他们的个人资料,只有管理员可以注册和编辑用户和他们的个人资料。 # my_app/models.py from django.db import models f
我用这样的用户配置文件扩展 django 用户模型: class UserProfile(BaseModel): user = models.ForeignKey(User, unique=T
我在 Django 中选择数据时遇到一些问题。 models.py class Location(models.Model): user = models.ForeignKey(User, o
我是一名优秀的程序员,十分优秀!