![](/img/trans.png)
[英]Django Create and Save Many instances of model when another object are created
[英]Create object when created another object in Django
在Django中創建另一個對象時可以創建對象嗎?
我有這樣的代碼,我想先創建AnotherModel實例,然后再創建Model實例(在創建AnotherModel時)。
class Model(models.Model):
name = models.CharFiled(max_length=50)
class AnotherModel(models.Model):
model = models.ForeignKey(Model, on_delete=models.CASCADE)
description = models.TextField()
我嘗試使用Django信號-pre_save。
@receiver(pre_save, sender=AnotherModel)
def save_model(sender, **kwargs):
# some code
但是我有這樣的例外:
ValueError:無法分配“ u'Test”:“ AnotherModel.resource”必須是“ Model”實例。
在Django中創建另一個對象時可以創建對象嗎?
是的,您可以,您是否有兩種選擇:
1) 選項1 :覆蓋保存( 覆蓋預定義的模型方法 )
from django.db import models
class AnotherModel(models.Model):
model = models.ForeignKey(Model, on_delete=models.CASCADE)
description = models.TextField()
def save(self, *args, **kwargs):
if self.pk is None: # create
self.model = Model.objects.create( name = "some random name" )
super().save(*args, **kwargs) # Call the "real" save() method.
2) 選項2 : 使用預保存信號 :
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=AnotherModel)
def my_handler(sender, **kwargs):
if sender.pk is None: # create
sender.model = Model.objects.create( name = "some random name" )
重要事項 :
必須先創建相關模型才能保存當前模型。 在示例中,我使用了:
Model.objects.create( name = "some random name" )
但是您可以按常規方式創建模型:
m = Model()
m.name = "random name"
m.save() # <--- important!
是的,可以在創建另一個對象時創建一個對象。 我認為使用信號可能是最好的方法。
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=AnotherModel)
def my_handler(sender, **kwargs):
if sender.pk is None:
sender.model = Model.objects.create(name="Name")
您只需要創建AnotherModel
的實例,以便發出已實現的信號:
>>> o = AnotherModel.objects.create(description='This is a silly description')
您可以檢查是否已創建Model
實例並將其分配給o.model
:
>>> o.model
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.