Django создает связанные объекты в save (), не сохраняя в БД - PullRequest
0 голосов
/ 05 июля 2019

У меня есть режим Profile, который имеет связанный набор объектов ProfileSiteFields (у ProfileSiteFields есть FK to 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, его там нет.

Есть предложения по отсутствию?

Обновление

Я понял это. Проблема была в специфике сайта.

Я создавал ProfileSiteFields для разных сайтов (например, 7). Чтобы просмотреть их, мне нужно было зайти на сайт, для которого они были созданы. (Например, на сайте 4 я не смог увидеть объект, созданный для сайта 7 - запрос вернул бы 0, но на сайте 7 он вернул бы 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...