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)
我发现 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)