Django添加新记录错误重复键值违反唯一约束“”Django Id不与数据库同步

Sal*_*lma 5 django django-models django-views django-postgresql

我开发了一个 Django 应用程序,它工作正常,直到我将数据迁移到 django 迁移创建的数据库,我使用 sql 脚本和 Pgadmin 迁移了数据。

现在我的数据库充满了记录,但是当我尝试使用 django 表单添加新记录时,出现以下错误:

重复的键值违反唯一约束 >“learningcenters_partnerorganization_pkey”详细信息:键 (id)=(1) 已存在。

考虑到该表的可用 ID 为 10。

模型:

class SLPAcademicRound(models.Model):
    name = models.CharField(max_length=45,
                            unique=True,
                            verbose_name=_('Academic Round Name'))
    code = models.CharField(max_length=5,
                            unique=True,
                            verbose_name=_('Code'))
    cycle = models.ForeignKey(
        SLPCycle,
        blank=False, null=True,
        verbose_name=_('SLP Cycle/SLP Cycle'),
        on_delete=models.CASCADE,
    )

    learning_center = models.ForeignKey(
        LearningCenter,
        blank=False, null=True,
        verbose_name=_('Learning Center'),
        on_delete=models.CASCADE,
    )

    round_date_start = models.DateField(
        blank=True,
        null=True,
        verbose_name=_('SLP Round Start Date')
    )
    round_date_end = models.DateField(
        blank=True,
        null=True,
        verbose_name=_('SLP Round End Date')
    )
    current_round = models.BooleanField(
        blank=True,
        null=True,
        verbose_name=_('Current Round')
    )
Run Code Online (Sandbox Code Playgroud)

看法:

class AddSLPAcademicRoundView(LoginRequiredMixin,
              GroupRequiredMixin,
              CreateView):

    template_name = 'bootstrap4/common_form.html'
    form_class = SLPAcademicRoundForm
    queryset= SLPAcademicRound.objects.all()
    group_required = ["LearningCenterManager"]


    def get_absolute_url(self):
        return reverse("slp:slp_academic_round_list")


    def form_valid(self, form):
        print((form.cleaned_data))
        form.save(self.request)
        return super(AddSLPAcademicRoundView, self).form_valid(form)

    def get_form_kwargs(self, *args, **kwargs):
        kwargs = super().get_form_kwargs(*args, **kwargs)
        kwargs['user'] = self.request.user
        return kwargs
Run Code Online (Sandbox Code Playgroud)

Sal*_*lma 5

我发现 pg_get_serial_sequence 的解决方案可用于避免对序列的任何错误假设。这会一次性重置序列:

SELECT pg_catalog.setval(pg_get_serial_sequence('table_name', 'id'), (SELECT MAX(id) FROM table_name)+1);

Run Code Online (Sandbox Code Playgroud)