我研究了Django框架,有一个练习要求您创建一个简单的博客Web应用程序.这个应用程序有简单的模型和表格来处理理论上用户会保存在项目数据库中的数据.

以下是模型:

from django.db import models


class Blog(models.Model):
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.text

class Post(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.text

以下是表格:

from django import forms
from . models import Blog, Post


class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ['text']
        labels = {'text': ''}

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['text']
        labels = {'text': ''}

因此,假设我通过db添加了一个博客实例.我是这样做的:

INSERT INTO learning_logs_topic (id, text, date_added)
VALUES
(1, 'A blog #1', now()::timestamptz);

这些数据出现在Django管理站点和html模板上.这几乎是立刻发生的,这意味着Django实际上已经意识到数据库中添加了新的日期.但是,当我试图通过管理站点或通过保存html表单添加博客实例时,Django抛出并出错. 下面是我要添加的ID为21的博客实例:

INSERT INTO blogs_blog (id, text, date_added)
VALUES
(21, 'test21', now()::timestamptz);

我得到了这个错误: 在/ADD_NEW_BLOG/处出现集成错误

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

不知道这里发生了什么.Django从db获取数据并将其发送到浏览器,但在try 将数据写入db时,它不会"看到"ID.

我想我需要让Django 看到数据库里最新的身份证.

推荐答案

不知道这里发生了什么.Django从db获取数据并将其发送到浏览器,但在try 将数据写入db时,它不会"看到"ID.

Django not确实生成ID,这是由数据库本身完成的.在PostgreSQL的情况下,通常是乘以sequence [pgsql-doc].如果手动添加带有id的记录(这通常不是very的好主意),序列将不会更新.

This answer显示了如何更新序列,以便从现在开始,它将生成以22开头的序列(在本例中).

但我建议not在插入值时首先指定主键.通常,您应该将主键视为"黑盒值".是的,出于技术原因,它在这里是一个int,但是例如,将两个主键加在一起没有任何意义,所以它只是一个实现细节.

Python相关问答推荐

从webhook中的短代码(而不是电话号码)接收Twilio消息

将特定列信息移动到当前行下的新行

rame中不兼容的d类型

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

log 1 p numpy的意外行为

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

如何从数据库上传数据到html?

从spaCy的句子中提取日期

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

Tkinter菜单自发添加额外项目

如何在Gekko中使用分层条件约束

有没有办法在不先将文件写入内存的情况下做到这一点?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

利用SCIPY沿第一轴对数组进行内插

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

如何在Polars中创建条件增量列?

无法使用请求模块从网页上抓取一些产品的名称

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?

迭代工具组合不会输出大于3的序列