Django не создает экземпляр модели каждый раз из представлений

У меня есть две модели, Person и Profiles, которые имеют отношения "один к одному" друг с другом. Модель Profiles состоит из набора BooleanFields, который указывает, есть ли у Person профили в социальных сетях.

#models.py

class Person(models.Model):
    name = models.CharField(max_length=256)
    address = models.TextField()
    dob = models.DateField()

class Profiles(models.Model):
    person = models.OneToOneField('Person', on_delete=models.CASCADE, related_name='profiles')
    fb = models.BooleanField(default=False)
    twitter = models.BooleanField(default=False)
    insta = models.BooleanField(default=False)
    linkedin = models.BooleanField(default=False)

Теперь, как только создается экземпляр модели Person, я хочу создать соответствующий экземпляр модели Profiles. Для этого в файле views.py, как только создается форма с атрибутами Person, я инстанцирую класс Profiles, в котором person будет только что созданный экземпляр. Как показано ниже:

#views.py

def upload(request):
    if request.method == 'POST':
        form = PersonUploadForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
            prof = Profiles(person=instance)
            prof.save()
        else:
            context = {'form': form}
            return render(request, 'template.html', context)
    else:
         form = PersonUploadForm()
    context = {'form': form}
    return render(request, 'template.html', context)

Теперь проблема, с которой я столкнулся, заключается в том, что prof = Profiles(person=instance) и prof.save() не работают в 100% случаев. Я знаю это, потому что модели Person и Profiles не имеют одинакового количества объектов, хотя теоретически они должны быть одинаковыми. Я откровенно удивлен, что это происходит, потому что вызов save() происходит в нормальном потоке управления функцией представления, и нет никакой ошибки, вылетающей во время выполнения.

Что здесь происходит и как это исправить? Прошу прощения, если вопрос сформулирован неправильно

Другим подходом было бы использование сигналов django:

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Person)
def create_profile(sender, instance, **kwargs):
    prof = Profiles()
    prof.person = instance
    prof.save()
Вернуться на верх