django model:获取刚刚创建的模型的主键

时间:2016-01-04 06:12:42

标签: python django django-models primary-key

模型定义如下:

class UnitTab(models.Model):
    unit_id = models.PositiveIntegerField(primary_key=True)
    create_time = models.PositiveIntegerField()
    update_time = models.PositiveIntegerField()
    read_db_connection = 'game_center_admin_db'
    write_db_connection = 'game_center_admin_db'

    class Meta:
        db_table = u'unit_tab'

    def save(self, *args, **kwargs):
        curr_time = int(time.time())
        if not self.create_time:
            self.create_time = curr_time
        self.update_time = curr_time
        super(UnitTab, self).save(*args, **kwargs)

    def __unicode__(self):
        return u'unit_tab_%s' % (self.unit_id)

我只是使用UnitTab保存UnitTab.objects.create()以创建新对象。 unit_idauto_increment,所以我没有设置它。 但是如果我使用"u = UnitTab.objects.create()",我回来的对象"u"unit_id为无 - 尽管保存成功。那么如何才能获得我刚刚保存/创建的primary key(unit_id)的{​​{1}}?

编辑:我正在使用Django 1.6.11作为我的项目

编辑:我记录了这些属性,发现在UnitTab之后,u.save()为无。 unit_id没问题,实体已成功保存。

编辑:从PositiveIntegerField更改为AutoField后,{(1}}字段在save()后自动分配。只是不确定为什么会这样。

2 个答案:

答案 0 :(得分:3)

创建新对象后:

u = UnitTab.objects.create()

通过使用refresh_from_db()方法从db刷新其值来跟进它。

u.refresh_from_db()

您可以在此处找到此信息:

https://docs.djangoproject.com/en/1.9/ref/models/instances/#refreshing-objects-from-database

编辑:

如果您使用的是django 1.6,请使用save()方法,您应该可以像这样访问它:

>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id     # Returns None, because b doesn't have an ID yet.
>>> b2.save()
>>> b2.id     # Returns the ID of your new object.

https://docs.djangoproject.com/en/1.6/ref/models/instances/#auto-incrementing-primary-keys

答案 1 :(得分:2)

您是否有特殊原因不想使用models.AutoField

spin_numberPages
            .setOnItemSelectedListener(new OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> parent,
                        View view, int position, long id) {
                    // TODO Auto-generated method stub
                       String id = values.get(position).getId();
                      // here you get ID and now you may do what you want to do with ID.

                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // TODO Auto-generated method stub

                }
            });