# this field). If so, fill it. if field and getattr(self, parent._meta.pk.attname) is None and getattr(self, field.attname) is not None: setattr(self, parent._meta.pk.attname, getattr(self, field.attname)) 对父类 model 执行 save_base() ??? self.save_base(cls=parent, origin=org, using=using, update_fields=update_fields) if field: setattr(self, field.attname, self._get_pk_val(parent._meta)) # Since we didn't have an instance of the parent handy, we # set attname directly, bypassing the descriptor. # Invalidate the related object cache, in case it's been # accidentally populated. A fresh instance will be # re-built from the database if necessary. cache_name = field.get_cache_name() if hasattr(self, cache_name): delattr(self, cache_name) if meta.proxy: return if not meta.proxy: non_pks = [f for f in meta.local_fields if not f.primary_key] if update_fields: non_pks = [f for f in non_pks if f.name in update_fields or f.attname in update_fields] # First, try an UPDATE. If that doesn't update anything, do an INSERT. pk_val = self._get_pk_val(meta) 直接获取主键的值 pk_set = pk_val is not None