当前位置: 首页 > 知识库问答 >
问题:

Django表单找不到正确的ID,在生产与LH之间的整数增量

李振国
2023-03-14

由于某种原因,在Localhost上一切正常,但是在我的生产服务器上,我的表单不能正确地添加新的用户提交。我得到的错误是:

duplicate key value violates unique constraint "..."
DETAIL:  Key (id)=(8) already exists.

是否有某种生产“sudo systemctl restart gunicorn”我需要运行(我已经尝试了上面的示例)?也许它只在LH上工作,因为我在那里测试了更多,增量自然与用户总数相同?我真的没有主意了。

models.py

class Lead(models.Model):
    username = models.CharField(max_length=15, blank=True, null=True)
    email = models.CharField(unique=True, max_length=150, validators=[validate_email])
    created = models.DateTimeField(auto_now_add=True)
    ...

forms.py

class LeadCaptureForm1(forms.ModelForm):
    birth_date = forms.DateField(widget=SelectDateWidget(years=range(1999, 1910, -1)))

    class Meta:
        model = Lead
        widgets = {
            'email': forms.TextInput(attrs={'class': 'form-control'}),
        }
        fields = ('email', 'birth_date',)

views.py

def iframe1(request):
    ip = get_real_ip(request)
    created = timezone.now()

    if request.method == 'POST':

        form = LeadCaptureForm1(request.POST)
        if form.is_valid():

            # Save lead
            lead = form.save()
            # attempt at fixing it
            #lead.id = Lead.objects.get(all).count()
            #print(lead.id)
            lead.created = created
            lead.birth_date = form.cleaned_data.get('birth_date')
            lead.ipaddress = get_real_ip(request)
            lead.joinmethod = "Iframe1"
            lead.save()

            print(lead)

共有2个答案

郝昊天
2023-03-14

这是由于我们手动上传了潜在客户

“SERIAL列填充了来自跟踪下一个可用值的序列的值。手动为自动递增的字段分配值不会更新字段的顺序,这可能会导致冲突。

https://docs.djangoproject.com/en/2.0/ref/databases/#manually-specifying-values-of-auto-incrementing-primary-keys

要解决这个问题,我们可以强制一个新的序列号或构建一个异常来修复序列号。后一种选择是理想的,因为我们将来可能会手动上传用户。但是,现在,我们将尝试强制序列号。

Run code: python manage.py sqlsequencereset [app_name]

由于某种原因,这不起作用,所以我正要尝试弄清楚如何构建某种“如果豁免,则python”,但首先发现了这篇文章(IntegrityError重复键值违反了唯一约束 - django / postgres),这有助于我直接更新“setval”:

SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1)
黄凌龙
2023-03-14

我不确定为什么要手动设置ID,特别是为什么要将其设置为项目计数。您应该始终让数据库管理主键本身 - 它是一个自动增量字段,并且对数据完全不透明。

出现此冲突的原因是可以删除项目,因此数据库中可以有8个条目,但ID 8已经存在。但正如我所说,不要这样做。

此外,不要手动设置<code>创建的

所以只要做到:

lead = form.save(commit=False)
lead.ipaddress = get_real_ip(request)
lead.joinmethod = "Iframe1"
lead.save()
 类似资料:
  • 我试图在Spark DataFrame上使用RangeBetween对Long类型的列执行窗口函数,但窗口的结果不正确。我做错什么了吗? 第一列是事件的时间戳(字符串,我们在实践中不会使用它),第二列是时间戳对应的unix时间,单位为10E-5秒。 现在,我想计算当前行的窗口中的事件数。例如,在3小时窗口中,我做: 正确返回: 和这个ISSU有关吗?[SPARK-19451][SQL]rangeB

  • 问题内容: 我正在尝试插入我的MySQL数据库。第一列是“ id”列,因为它是一个auto_increment字段,所以我将其留为空白。由于某些原因,我无法插入,并且出现了下面提到的错误。我对此表示感谢。 尝试插入时出现以下错误: 我的查询 问题答案: 这可能意味着您是一个整数,并且您正在尝试发送字符串。您应该指定一个列列表,并从中删除它。

  • 请,任何人都可以帮助我找到正确的XPath来检索日期值“07/05/2018 04:45” 我试过但没有成功: /输入[@type=“text”]@值 //*[@id="start Date"]

  • 如果这个数学是在计算器上完成的,“百分比”的值是0.424。但是,如果在代码中运行它,该值将四舍五入为0.43,这是不准确的。我怎样才能阻止这种情况发生? 注意:请不要质疑10000的数字,我也需要结果完全正确的数字(0.424),这是非常重要的在这种情况下!

  • 问题内容: 如何在Python中生成0到9(含)之间的随机整数? 例如, 问题答案: 尝试:

  • 我一直试图在一个正弦波产生项目中添加释放(或衰减)时间,以这个例子为基础。我基本上想要的不是声音被如此剧烈地切断,当我停止生成它时,在结束时增加一些释放。 我怎样才能实现呢?