使用Django插入数据库时​​,主键不会自动更新

时间:2017-02-20 03:50:16

标签: python django

我有一张postgres表:

                                                         Table "public.channels"
   Column   |            Type             |                       Modifiers                       | Storage  | Stats target | Description 
------------+-----------------------------+-------------------------------------------------------+----------+--------------+-------------
 id         | integer                     | not null default nextval('channels_id_seq'::regclass) | plain    |              | 
 area       | character varying(12)       | not null                                              | extended |              | 
 measure    | integer                     |                                                       
Indexes:
    "channels_pkey" PRIMARY KEY, btree (id)

我可以使用psql插入此表格,而我未指定的id列每次都会增加。我最终在表格中输入了几个条目。

我有这个表的Django模型:

class Channels(models.Model):
    area = models.CharField(primary_key=True, max_length=12, editable=True)
    measure = models.IntegerField(blank=False, null=False)

    def __str__(self):
        return str(self.measure)

    class Meta:
        verbose_name_plural = 'Channels'
        managed = False
        db_table = 'channels'

我试图像这样插入:

area = 'site b'
for sample in samples:
    measure = sample['measure']

    ch = Channels(area=area, measure=measure)
    ch.save()

将每个测量值插入表中。但是主键不会增加,最后,最后一次测量是表中唯一的测量。它包含来自sample的最后samples的数据。

为什么主键不会自动递增,以便每个测量都进入自己的行?

1 个答案:

答案 0 :(得分:0)

根据documentation

  

如果您想指定自定义主键,只需在其中一个字段中指定primary_key = True即可。如果Django看到你明确设置了Field.primary_key,它就不会添加自动id列。

您已将area设置为主键,因此Django不会更新它。我认为不是制作area主键,而是可以像以下一样设置它:

area = models.CharField(unique=True, max_length=12, editable=True)