Django 不会每次都从 Views 创建模型实例

Django does not create a model instance every single time from Views

我基本上有两个模型,PersonProfiles,它们之间是一对一的关系。 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 class 并且 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% 的时间都有效。我知道这是因为 PersonProfiles 模型在理论上应该相同时却没有相同数量的对象。坦率地说,我对这种情况的发生感到惊讶,因为 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()