Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Django配置文件id不能使用get_或_create为null,它与数据库有何关系?_Database_Django_Sqlite_Profile - Fatal编程技术网

Database Django配置文件id不能使用get_或_create为null,它与数据库有何关系?

Database Django配置文件id不能使用get_或_create为null,它与数据库有何关系?,database,django,sqlite,profile,Database,Django,Sqlite,Profile,我跟着楼梯走了一点 不完全一样,因为我正处于发展这个想法的过程中。 我在这个网站上特别使用了这句话: User.profile=属性(lambda u: UserProfile.objects.get\u或\u create(user=u)[0]) 我总是在创建对象时收到一条错误消息,通常是 “XX”不能为空。我通过玩模型解决了部分问题 和(在我现在的例子中)sqliteman。直到我得到同样的东西 id上的消息:“xxx.id不能为空” 在网上,我找到了一个可能的解决方案的描述,其中包括重置

我跟着楼梯走了一点

不完全一样,因为我正处于发展这个想法的过程中。 我在这个网站上特别使用了这句话:

User.profile=属性(lambda u: UserProfile.objects.get\u或\u create(user=u)[0])

我总是在创建对象时收到一条错误消息,通常是 “XX”不能为空。我通过玩模型解决了部分问题 和(在我现在的例子中)sqliteman。直到我得到同样的东西 id上的消息:“xxx.id不能为空”

在网上,我找到了一个可能的解决方案的描述,其中包括重置 我不太乐意这样做。特别是因为 不同的解决方案,它可能涉及到应用程序数据库的重置

但是因为UserProfile模型是新的,到现在还是空的, 我直接在DB上玩它,然后用手在桌子上放了一滴,然后 请syncdb重建它。(有点冒险的想法)

现在,这是sqlite转储的区别:

294,298c290,294
< CREATE TABLE "myt_userdata" (
<     "id" integer NOT NULL PRIMARY KEY,
<     "user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
<     "url" varchar(200),
<     "birthday" datetime
---
> CREATE TABLE myt_userdata (
>     "id" INTEGER NOT NULL,
>     "user_id" INTEGER NOT NULL,
>     "url" VARCHAR(200),
>     "birthday" DATETIME
“新的” 为什么Django抱怨myt_userdata.id不能为null

因为
id
不是主键,也不会自动填充。而且,您在创建模型时不提供它,所以DB不知道该做什么

Django是否尝试与下划线db结构关联,如何关联?(例如,NOTNULL消息来自模型或db?)

这是DB的错误,不是Django的错误


您可以使用来了解在syncdb上到底执行了什么。上面的变量似乎是由正确的Django模型生成的正确的表定义,我没有ide。您是如何得到下面的变量的。编写一个正确而清晰的模型,您将在
syncdb

之后得到正确的工作表方案我问这个问题的主要原因是我发现有两种情况需要数据库重置。我的意思是非常明显的
唯一的
外键
OneToOneField
它们应该“几乎”相等,除了从文档中:但是关系的“反向”端将直接返回一个对象。这对我来说不是很清楚。请澄清(如果你没有完全阅读给定的链接)。我有一个UserData模型,我把它改成了“UserProfile”(我保留了旧的类名)。但是问题有点不同。干杯,听起来很明显。有时你只需要一个简单的描述就可以了。。)我给你做了标记,但在给出答案之前,我想再次检查第一个表定义是如何创建的问题,或者我猜是这样;)。对于DB,我肯定没有键入它!而且模型从一开始就被定义为连接到用户。我仔细检查了我是如何生成它的。顺便说一句:谢谢。在我最后的评论中,“从一开始”“意味着直到最近我才将模型移动为UserProfile模型。。这可能是问题的一部分吗?嗯。。这可能是sqlite的问题。。但在第二个定义中,我也没有看到自动递增。。但我不是sqlite专家。它实际上让我们回到原来的问题:django如何与db引擎关联?我检查过了。看来我做错了。在使用sqliteman打开数据库时,很可能(请务必阅读)打开altertable,甚至点击cancel按钮都会更改数据库定义。这是一个问题。或者可能是django/sqlite问题。我用一句话接受了这个答案:最好从dbengine获得原始异常,这样我就不会问了;)我的意思是,谁生成了异常:可能不是空的。我想重新打开这个问题。在我想到使用sqliteman可能会把事情搞砸之前。。但我又遇到了同样的问题。现在我有了一个已定义的模型、一个已定义的模型表单和一个清晰的视图。我又遇到问题了。Django与sqlite的工作是否异常?
user = models.ForeignKey(User, unique=True)
class UserData(models.Model):

    user = models.ForeignKey(User, unique=True)

    url = models.URLField("Website", blank=True, null=True)

    birthday = models.DateTimeField('Birthday', blank=True, null=True)

    def __unicode__(self):
        return self.user.username

User.profile = property(lambda u: UserData.objects.get_or_create(user=u,defaults={'birthday': '1970-01-01 00:00:00'})[0])