Django 通过表单OnetoOneField更新-重复键值违反唯一约束
我正在创建一个应用程序,用户可以在其中创建一个Django 通过表单OnetoOneField更新-重复键值违反唯一约束,django,database,postgresql,Django,Database,Postgresql,我正在创建一个应用程序,用户可以在其中创建一个项目,每个项目都有一个问题集(即一个表单-我称之为Firstquestions) 我希望用户能够通过表单编辑/更新这组问题。 但是,我得到了一个错误: 重复键值违反唯一约束 我正在使用PostgreSQL 项目/模型.py class Project(models.Model): title = models.CharField(max_length=255) content = models.TextField() deve
项目
,每个项目都有一个问题集
(即一个表单-我称之为Firstquestions)
我希望用户能够通过表单编辑/更新这组问题。
但是,我得到了一个错误:
重复键值违反唯一约束
我正在使用PostgreSQL
项目/模型.py
class Project(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
urlpatterns = [
#Regarding the projects
path('allprojects', views.allprojects, name='allprojects'),
path('createproject', views.createproject, name='createproject'),
path('<int:project_id>', views.projectdetail, name='projectdetail'),
path('<int:project_id>/editproject', views.editproject, name='editproject'),
path('<int:project_id>/deleteproject', views.deleteproject, name='deleteproject'),
#Regarding the set of questions
path('<int:project_id>/', include('firstquestions.urls')),
]
class Firstquestion(models.Model):
first_one = models.TextField()
first_two = models.TextField()
first_three = models.TextField()
first_four = models.TextField()
first_five = models.TextField()
first_six = models.TextField()
first_seven = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
project = models.OneToOneField(Project, on_delete=models.CASCADE)
urlpatterns = [
path('questionstoanswer', views.questionstoanswer, name='questionstoanswer'),
path('firstquestionsdetail', views.firstquestionsdetail, name='firstquestionsdetail'),
path('firstquestionsedit', views.firstquestionsedit, name='firstquestionsedit'),
]
@login_required
def firstquestionsedit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
if request.POST['first_one'] and request.POST['first_two'] and request.POST['first_three'] and request.POST['first_four'] and request.POST['first_five'] and request.POST['first_seven']:
question = Firstquestion()
question.first_one = request.POST['first_one']
question.first_two = request.POST['first_two']
question.first_three = request.POST['first_three']
question.first_four = request.POST['first_four']
question.first_five = request.POST['first_five']
# question.first_six = request.POST['first_six']
question.first_seven = request.POST['first_seven']
question.developer = request.user
question.project = project
question.save()
messages.success(request, 'Answers for User Centered Design questions have been edited')
return redirect('/projects/allprojects')
else:
return render(request, 'firstquestions/firstquestionsedit.html', {'error':'All fields are required.'})
return render(request, 'firstquestions/firstquestionsedit.html', {'project':project})
projects/url.py
class Project(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
urlpatterns = [
#Regarding the projects
path('allprojects', views.allprojects, name='allprojects'),
path('createproject', views.createproject, name='createproject'),
path('<int:project_id>', views.projectdetail, name='projectdetail'),
path('<int:project_id>/editproject', views.editproject, name='editproject'),
path('<int:project_id>/deleteproject', views.deleteproject, name='deleteproject'),
#Regarding the set of questions
path('<int:project_id>/', include('firstquestions.urls')),
]
class Firstquestion(models.Model):
first_one = models.TextField()
first_two = models.TextField()
first_three = models.TextField()
first_four = models.TextField()
first_five = models.TextField()
first_six = models.TextField()
first_seven = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
project = models.OneToOneField(Project, on_delete=models.CASCADE)
urlpatterns = [
path('questionstoanswer', views.questionstoanswer, name='questionstoanswer'),
path('firstquestionsdetail', views.firstquestionsdetail, name='firstquestionsdetail'),
path('firstquestionsedit', views.firstquestionsedit, name='firstquestionsedit'),
]
@login_required
def firstquestionsedit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
if request.POST['first_one'] and request.POST['first_two'] and request.POST['first_three'] and request.POST['first_four'] and request.POST['first_five'] and request.POST['first_seven']:
question = Firstquestion()
question.first_one = request.POST['first_one']
question.first_two = request.POST['first_two']
question.first_three = request.POST['first_three']
question.first_four = request.POST['first_four']
question.first_five = request.POST['first_five']
# question.first_six = request.POST['first_six']
question.first_seven = request.POST['first_seven']
question.developer = request.user
question.project = project
question.save()
messages.success(request, 'Answers for User Centered Design questions have been edited')
return redirect('/projects/allprojects')
else:
return render(request, 'firstquestions/firstquestionsedit.html', {'error':'All fields are required.'})
return render(request, 'firstquestions/firstquestionsedit.html', {'project':project})
firstquestions/url.py
class Project(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
urlpatterns = [
#Regarding the projects
path('allprojects', views.allprojects, name='allprojects'),
path('createproject', views.createproject, name='createproject'),
path('<int:project_id>', views.projectdetail, name='projectdetail'),
path('<int:project_id>/editproject', views.editproject, name='editproject'),
path('<int:project_id>/deleteproject', views.deleteproject, name='deleteproject'),
#Regarding the set of questions
path('<int:project_id>/', include('firstquestions.urls')),
]
class Firstquestion(models.Model):
first_one = models.TextField()
first_two = models.TextField()
first_three = models.TextField()
first_four = models.TextField()
first_five = models.TextField()
first_six = models.TextField()
first_seven = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
project = models.OneToOneField(Project, on_delete=models.CASCADE)
urlpatterns = [
path('questionstoanswer', views.questionstoanswer, name='questionstoanswer'),
path('firstquestionsdetail', views.firstquestionsdetail, name='firstquestionsdetail'),
path('firstquestionsedit', views.firstquestionsedit, name='firstquestionsedit'),
]
@login_required
def firstquestionsedit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
if request.POST['first_one'] and request.POST['first_two'] and request.POST['first_three'] and request.POST['first_four'] and request.POST['first_five'] and request.POST['first_seven']:
question = Firstquestion()
question.first_one = request.POST['first_one']
question.first_two = request.POST['first_two']
question.first_three = request.POST['first_three']
question.first_four = request.POST['first_four']
question.first_five = request.POST['first_five']
# question.first_six = request.POST['first_six']
question.first_seven = request.POST['first_seven']
question.developer = request.user
question.project = project
question.save()
messages.success(request, 'Answers for User Centered Design questions have been edited')
return redirect('/projects/allprojects')
else:
return render(request, 'firstquestions/firstquestionsedit.html', {'error':'All fields are required.'})
return render(request, 'firstquestions/firstquestionsedit.html', {'project':project})
我的编辑功能
firstquestions/views.py
class Project(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
urlpatterns = [
#Regarding the projects
path('allprojects', views.allprojects, name='allprojects'),
path('createproject', views.createproject, name='createproject'),
path('<int:project_id>', views.projectdetail, name='projectdetail'),
path('<int:project_id>/editproject', views.editproject, name='editproject'),
path('<int:project_id>/deleteproject', views.deleteproject, name='deleteproject'),
#Regarding the set of questions
path('<int:project_id>/', include('firstquestions.urls')),
]
class Firstquestion(models.Model):
first_one = models.TextField()
first_two = models.TextField()
first_three = models.TextField()
first_four = models.TextField()
first_five = models.TextField()
first_six = models.TextField()
first_seven = models.TextField()
developer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
project = models.OneToOneField(Project, on_delete=models.CASCADE)
urlpatterns = [
path('questionstoanswer', views.questionstoanswer, name='questionstoanswer'),
path('firstquestionsdetail', views.firstquestionsdetail, name='firstquestionsdetail'),
path('firstquestionsedit', views.firstquestionsedit, name='firstquestionsedit'),
]
@login_required
def firstquestionsedit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
if request.POST['first_one'] and request.POST['first_two'] and request.POST['first_three'] and request.POST['first_four'] and request.POST['first_five'] and request.POST['first_seven']:
question = Firstquestion()
question.first_one = request.POST['first_one']
question.first_two = request.POST['first_two']
question.first_three = request.POST['first_three']
question.first_four = request.POST['first_four']
question.first_five = request.POST['first_five']
# question.first_six = request.POST['first_six']
question.first_seven = request.POST['first_seven']
question.developer = request.user
question.project = project
question.save()
messages.success(request, 'Answers for User Centered Design questions have been edited')
return redirect('/projects/allprojects')
else:
return render(request, 'firstquestions/firstquestionsedit.html', {'error':'All fields are required.'})
return render(request, 'firstquestions/firstquestionsedit.html', {'project':project})
请试试这个
@login_required
def firstquestionsedit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
if request.POST['first_one'] and request.POST['first_two'] and request.POST['first_three'] and request.POST['first_four'] and request.POST['first_five'] and request.POST['first_seven']:
question = Firstquestion.objects.filter(project=project).first()
question.first_one = request.POST['first_one']
question.first_two = request.POST['first_two']
question.first_three = request.POST['first_three']
question.first_four = request.POST['first_four']
question.first_five = request.POST['first_five']
# question.first_six = request.POST['first_six']
question.first_seven = request.POST['first_seven']
question.save()
messages.success(request, 'Answers for User Centered Design questions have been edited')
return redirect('/projects/allprojects')
else:
return render(request, 'firstquestions/firstquestionsedit.html', {'error':'All fields are required.'})
return render(request, 'firstquestions/firstquestionsedit.html', {'project':project})
首先,您应该使用Django表单。模型表单将为您完成大部分工作,包括验证和保存。非常感谢,您能更准确地说“模型表单”吗?我是Django的新手,谢谢!现在唯一的问题是,当我更新
first_-six
时,我在/projects/5/firstquestionsedit处得到了错误multivaluedictkeyrorm
我想你没有通过post请求传递“first_-six”键。谢谢,它是在html中。我忘了传递name=“first\u six”