使用django的modelForm出现数据只创建数据不更新数据(form.save)怎么办?
使用django的modelForm出现数据只创建数据不更新数据(form.save)
models.py,数据库有多个字段
class UserInfo(models.Model): userid = models.AutoField(verbose_name="ID", primary_key=True)
name = models.CharField(verbose_name="用户名", max_length=16) # varchar
password = models.CharField(verbose_name="密码", max_length=100) # varchar
age = models.IntegerField(verbose_name="年龄") # int
phone = models.IntegerField(verbose_name="手机号") # int
email = models.EmailField(verbose_name="邮箱", max_length=32, null=True) # varchar
address = models.CharField(verbose_name="地区", max_length=50, null=True) # varchar
vipoptions = [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
viplevel = models.IntegerField(verbose_name="vip等级", default=1, choices=vipoptions)
registerdate = models.DateTimeField(verbose_name="注册时间", auto_now_add=True) # date
logintime = models.DateTimeField(verbose_name="登录时间", null=True) # date
superuser = models.BooleanField(verbose_name="是否超级用户", default=False) # boolean
views.py
class UserInfo(forms.ModelForm): class Meta:
model = models.UserInfo
fields = ['name', 'password', 'age', 'email', 'phone']
def user_list(request):
queryset = models.UserInfo.objects.all().order_by("userid") # asc,如果("-userid")就是desc
return render(request, 'user_list.html', {'queryset': queryset})
def edit_user(request):
user_id = request.GET.get("id") # 通过id获取当前部门对象
user_object = models.UserInfo.objects.filter(userid=user_id).first()
print(user_object)
if request.method == "GET": # 获取默认值
# print(user_id)
# print(request.GET)
# 显示标签+默认数据展示
form = UserInfo(instance=user_object)
return render(request, 'edit_user.html', {'form': form})
#print(request.POST)
form = UserInfo(data=request.POST, instance=user_object)
print(form)
if form.is_valid():
form.save() # 如果上面参数只传入data,这里的save是新建的意思,会导致新建一个用户,加上instance是修改数据
return redirect('/user/list')
else:
return render(request, 'edit_user.html', {'form': form})
前端修改数据的页面edit_user.html
<form method="post" action="/edit/user/" novalidate > {% csrf_token %}
<a>用户名:</a>{{ form.name }}<span style="color:red">{{ form.user.errors.0 }}</span>
<a>密码:</a>{{ form.password }}<span style="color:red">{{ form.password.errors.0 }}</span>
<a>年龄:</a>{{ form.age }}<span style="color:red">{{ form.age.errors.0 }}</span>
<a>邮箱:</a>{{ form.email }}<span style="color:red">{{ form.email.errors.0 }}</span>
<a>手机:</a>{{ form.phone }}<span style="color:red">{{ form.phone.errors.0 }}</span>
<input type="submit" value="提交">
</form>
问题是通过编辑user_list的用户数据,每次修改只会创建新的数据,并不会通过id值更新数据,已经传入instance参数,save()都不行,通过
if form.is_valid(): form.save()
会报错Cannot force an update in save() with no primary key.,我数据库userid设置了primarykey,但是修改用户信息的时候不需要修改这个primarykey,虽然数据库字段好多,但是修改用户信息只需要修改个别字段,但是modelform的save好像要全部字段要统一修改才可以更新?那岂不是好麻烦,如果我针对上面情况,数据库多个字段,但是管理员或者个人用户只需要修部分字段怎么做?感谢大牛解答~
以上是 使用django的modelForm出现数据只创建数据不更新数据(form.save)怎么办? 的全部内容, 来源链接: utcz.com/p/939077.html