如何解决Django使用外键将数据添加到数据库表
我有一个带有标准Django用户数据库外键的模型。
models.py
class Links(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,blank=True)
full_link = models.CharField('Полные ссылки пользователя',max_length=100)
short_link = models.CharField('Короткие ссылки пользователя',max_length=100)
class Meta:
verbose_name = 'Ccылка'
verbose_name_plural = 'Ссылки'
def __str__(self):
return self.full_link
有我的forms.py和views.py
forms.py
class AddLink(forms.ModelForm):
full_link = forms.CharField(required=True)
short_link = forms.CharField(required=True)
class Meta:
model = Links
fields = ['full_link','short_link']
views.py
def link(request):
if request.method == "POST":
addUserLink = AddLink(request.POST)
if addUserLink.is_valid():
addUserLink.user = request.user
addUserLink.save()
messages.success(request,f'Ссылка добавлена')
else:
addUserLink = AddLink()
return render(request,'users/links.html',{'userLinks': userLinks,'title':'Пользовательские ссылки','addUserLink': addUserLink})
我想在数据库的链接表中添加一条记录。授权用户以表格形式输入值,并且我遇到错误 NOT NULL约束失败:users_links.user_id 。我认为当我尝试提交表单时,它不会发送user_id。为什么?
解决方法
您没有在表单中指定user
字段。因此,可以将null=True
添加到模型的user
字段中,或者将用户字段添加到表单中,如下所示:
class AddLink(forms.ModelForm):
class Meta:
model = Links
fields = ['full_link','short_link','user']
,
可以通过以下方式实现:
models.py
class Links(models.Model):
author = models.ForeignKey(User,on_delete=models.CASCADE,default=None,blank=True)
full_link = models.CharField('Полные ссылки пользователя',max_length=100)
short_link = models.CharField('Короткие ссылки пользователя',max_length=100)
class Meta:
verbose_name = 'Ccылка'
verbose_name_plural = 'Ссылки'
def __str__(self):
return self.full_link
views.py
def link(request):
if request.method == "POST":
addUserLink = AddLink(request.POST)
print(addUserLink)
if addUserLink.is_valid():
instance = addUserLink.save(commit=False)
instance.author = request.user
instance.save()
messages.success(request,f'Ссылка добавлена')
else:
addUserLink = AddLink()
forms.py
class AddLink(forms.ModelForm):
full_link = forms.CharField(required=True)
short_link = forms.CharField(required=True)
class Meta:
model = Links
fields = ['full_link','author']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。