Django 不会每次都从 Views 创建模型实例
Django does not create a model instance every single time from Views
我基本上有两个模型,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
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% 的时间都有效。我知道这是因为 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()
我基本上有两个模型,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
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% 的时间都有效。我知道这是因为 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()