想知道是否有人可以帮助我。我正在尝试编写一个表单和视图,将新的用户配置文件添加到我的数据库中。 User模型有一个ManyToMany字段,指向一个名为' Interest'的表,这允许用户选择他们拥有的兴趣。
模型
class Interest(models.Model):
title = models.TextField()
class User(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
date_of_birth = models.DateField()
email = models.EmailField()
password = models.CharField(max_length=32)
course = models.ForeignKey(Course)
location = models.ForeignKey(Location)
interests = models.ManyToManyField(Interest)
bio = models.TextField(blank=True)
查看
def add_user(request):
if request.method == 'POST':
form = AddUserForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
submission = User(
first_name=cd['first_name'],
last_name=cd['last_name'],
date_of_birth=cd['date_of_birth'],
email=cd['email'],
password=cd['password'],
course=cd['course'],
location=cd['location'],
interests=cd['interests'], #Line that is causing errors
bio=cd['bio']
)
submission.save()
return HttpResponseRedirect('/add-user/')
else:
form = AddUserForm()
return render(request, 'adduser.html', {'form': form})
表格
class AddUserForm(forms.ModelForm):
class Meta:
model = User
fields = [
'first_name',
'last_name',
'date_of_birth',
'email',
'password',
'course',
'location',
'interests',
'bio',
]
widgets = {
'password': forms.PasswordInput(),
}
有没有人有办法让这项工作正常并允许我创建新用户?
非常感谢!
答案 0 :(得分:0)
正如错误所述,当您实例化模型时,多对多字段无效作为关键字参数,因为实际上它们引用了单独的链接表,并且必须已经保存它们相关的实例。
但是,您不需要手动执行此操作。使用ModelForm的一个重点是它有一个save
方法,它负责设置所有字段,包括必要时的m2m。
if form.is_valid():
submission = form.save()
return HttpResponseRedirect('/add-user/')
然而,您必须永远不会使用您在此处所做的事情。您以纯文本格式存储密码,这是一个严重的安全漏洞。也没有理由这样做:Django包含一个身份验证框架,负责为您提供哈希密码,并且易于扩展。请改用它。