与Postgres的Django:如何在Django模型中允许Null为默认值

时间:2014-04-28 01:56:17

标签: django postgresql postgis

我正在使用Django和Postgres,并尝试将数据从csv加载到表。但是,由于一个字段是Geometry Field,因此我在加载表时必须将其留空(否则\copy from将失败)。

这是我的模特:

name = models.CharField(max_length=200)
lat = models.DecimalField(max_digits=6, decimal_places=4, default=Decimal('0.0000'))
lon = models.DecimalField(max_digits=7,decimal_places=4, default=Decimal('0.0000'))
geom = models.PointField(srid=4326, blank=True, null=True, default=None)

在迁移之后,我运行了这样的psql:

mydb=>\copy target(name,lat,lon) from 'file.csv' DELIMITER ',' CSV HEADER ;

我得到这样的错误:

ERROR:  null value in column "geom" violates not-null constraint
DETAIL:  Failing row contains (name1, 30.4704, -97.8038, null).
CONTEXT:  COPY target, line 2: "name1, 30.4704, -97.8038"

这里是csv文件的一部分:

name,lat,lon
name1,30.4704,-97.8038
name2,30.3883,-97.7386

这里是\ d +目标:

mydb=> \d+ target
                            Table "public.target"
   Column   |          Type          | Modifiers | Storage  | Stats target | Description 
------------+------------------------+-----------+----------+--------------+-------------
 name       | character varying(200) | not null  | extended |              | 
 lat        | numeric(6,4)           | not null  | main     |              | 
 lon        | numeric(7,4)           | not null  | main     |              | 
 geom       | geometry(Point,4326)   |           | main     |              | 
Indexes:
    "target_pkey" PRIMARY KEY, btree (name)
    "target_geom_id" gist (geom)

所以我想在将csv加载到表时将geom设置为null?我该如何解决?我想设置默认的归档geom为null,以便我可以使用其他查询更新它。

非常感谢!!

1 个答案:

答案 0 :(得分:0)

选择不同的选项,描述为here

你可以:

1)使用占位符(0,0)然后覆盖。

或:

2)设置spacial_index=False