django - 通过表单 OnetoOneField 更新 - 重复的键值违反唯一约束

标签 django database postgresql

我正在创建一个应用程序,用户可以在其中创建 project每个项目都有一个且只有一个 set of questions (即一个表格 - 我将其称为“Firstquestions”)。

我希望用户能够编辑/更新此set of questions通过表格。 但是,我收到错误: duplicate key value violates unique constraint

我正在使用 PostgreSQL

projects/models.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)

projects/urls.py

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')),

]

firstquestions/models.py

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)

firstquestions/urls.py

urlpatterns = [
    path('questionstoanswer', views.questionstoanswer, name='questionstoanswer'),
    path('firstquestionsdetail', views.firstquestionsdetail, name='firstquestionsdetail'),
    path('firstquestionsedit', views.firstquestionsedit, name='firstquestionsedit'),

]

我的编辑功能

firstquestions/views.py

@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 - 通过表单 OnetoOneField 更新 - 重复的键值违反唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56927134/

相关文章:

node.js - 如何与 NodeJS、Jest 和 Knex 并行运行 Postgres 测试?

Django : ModelForm with conditions

python - 使用 Django 翻译 json 文件

database - 访问 Facebook 数据

c++ - 如何从 C++ 中列出 BDB 中的键/值

postgresql - 在 Postgres 中的变量中存储任意日期

python - 将相同的 Pandas 数据帧存储到数据库后不相等

Django 删除错误信息

python - 显示 Django 中多个表的最后结果

sql - 多个数据库文件是否比多个表的数据库文件效率低?(SQLite3&Node.js)