我有一个模式Profile
,其相关对象集为ProfileSiteFields
(ProfileSiteFields具有要配置的FK)。
我想在基于某些业务逻辑创建新Profile时创建ProfileSiteFields。出于某种原因,相关对象的创建很好,但是没有保存到数据库中。
def save(self, *args, **kwargs):
is_new_object = self._state.adding
super(Profile, self).save(*args, **kwargs)
if is_new_object:
self._create_profile_site_fields_objects()
def _create_profile_site_fields_objects(self):
site_ids_to_create = SiteWhiteLabeling.objects.filter(
copy_profile_id_to_site_fields=True
).values_list('site', flat=True)
for site_id in site_ids_to_create:
site_field_obj = ProfileSiteFields.objects.create(
profile=self,
site_id=site_id,
external_id=self.unique_id
)
当我在site_field_obj
循环中退出for
时,一切都按预期进行-像这样:
{
'_profile_cache': Profile : TEST NEW PROFILE 6 - Unknown,
'_state': <django.db.models.base.ModelState object at 0x7f21644dd2d0>,
'site_id': 7,
'external_id': u'P3DAB584',
'id': 23498,
'profile_id': 28611
}
...它只是不会保存到数据库。我也尝试过这种语法
site_field_obj = ProfileSiteFields(...)
site_field_obj.save()
并从调试器中调用.save()
,但是当我在ProfileSiteFields
中查询对象时,它不在那儿。
关于缺少什么的任何建议吗?
更新
我知道了。问题在于地点的特殊性。
我正在为不同的站点(例如7)创建ProfileSiteFields。为了查看它们,我必须去创建它们的站点。 (例如,在站点4上,我看不到为站点7创建的对象-查询将返回0,但在站点7上它将返回1。