使用django的modelForm出现数据只创建数据不更新数据(form.save)怎么办?

使用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

回到顶部