我在Django中有一个带有Django用户模型外键的模型。我试图用表单更新我的模型,但数据库没有更新。我无法弄清楚问题所在。
from django.conf import settings
class UserInfo(models.Model):
username = models.CharField(max_length = 30)
owner = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,)
from django import forms
from society.models import UserInfo
class Editform(forms.ModelForm):
username=forms.CharField(widget=forms.TextInput(attrs={'onchange': 'this.form.submit();', 'class': 'editinput'}))
class Meta:
model = UserInfo
fields ='__all__'
from django.shortcuts import render
from society.models import UserInfo
from django.contrib.auth.models import User
from society.forms import Editform
def ProfileView(request):
user = request.user
username = UserInfo.objects.get(owner=user)
if request.method == 'POST':
form = Editform(request.POST, instance=username)
if form.is_valid():
form.save()
else:
form = Editform(instance=username)
return render (request, 'profile_view.html', {'user':username, 'form':form})
from django.conf.urls import url
from django.contrib import admin
import society.views
urlpatterns = [
url(r'^$', 'society.views.home'),
url(r'^admin/', admin.site.urls),
url(r'^login/', 'django.contrib.auth.views.login'),
url(r'^logout/', 'django.contrib.auth.views.logout'),
url(r'^userreg/', 'society.views.UserReg'),
url(r'^profile/', 'society.views.ProfileView'),
]
<div>
<form method="POST">
{% csrf_token %}
{{form.username}}
{{user.username}}
</form>
</div>
当我更改form.username时,user.username会立即更改,但数据库不会更新。我尝试添加提交按钮,但仍然没有运气。
答案 0 :(得分:1)
您可以更新2方法,例如:在这里,我将更新您的用户名,
1)如果您使用object.get()
:
get_name = UserInfo.objects.get(owner=user)
get_name['username'] = 'Your Input what you need to change'
get_name.save()
2)如果你使用object.filter()
:
get_name = UserInfo.objects.filter(owner=user).update(username='your data') # or form.username
多数民众赞成......
答案 1 :(得分:1)
您应该传递记录ID以更新现有的UserInfo记录。
from django.shortcuts import render
from society.models import UserInfo
from django.contrib.auth.models import User
from society.forms import Editform
def ProfileView(request):
user_id = request.POST.get('user_id')
user = UserInfo.objects.get(pk=user_id)
if request.method == 'POST':
form = Editform(request.POST, instance=user)
if form.is_valid():
form.save()
else:
form = Editform(instance=user)
return render (request, 'profile_view.html', {'user':username, 'form':form})
答案 2 :(得分:0)
除了其他任何东西,你还没有把你的表单指向任何东西,因此表单无法连接到视图的逻辑 - 实际上,你已经指定了表单应该是POST内容,而不是指向何处。
表单应指向urls.py文件中的URL,该URL当然与您在上面显示的视图相关联。这可以通过以下方式工作:
<form action="{% url 'core.views.new_comment' %}" method="post">
{% csrf_token %}
...
</form>
还有更多指导about how this works here in the docs.(显然人们知道文档中的答案,诀窍是找到它。:))
(此外,您在views.py中的格式设置已关闭,但我认为在输入问题时这只是一个剪切和粘贴问题。)
答案 3 :(得分:0)
无论如何我解决了这个问题,谢谢大家。刚刚更改了form.py
来自django导入表单 来自society.models导入UserInfo
class Editform(forms.ModelForm):
username=forms.CharField(widget=forms.TextInput(attrs={'onchange': 'this.form.submit();', 'class': 'editinput'}))
class Meta:
model = UserInfo
exclude =('owner',)
由于所有者是必填字段,但我从模板中省略了它,显示必填字段错误。它现在正在工作。不管怎样,谢谢。