gpt4 book ai didi

python - 在 Django 中创建另一个对象时创建对象

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:47 24 4
gpt4 key购买 nike

当我在 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

但我有这样的异常(exception):

ValueError:无法分配“u'Test”:“AnotherModel.resource”必须是“Model”实例。

最佳答案

Is it possible to create object when I created another object in Django?

是的,可以,你有两个选择吗:

1) 选项 1:覆盖保存 ( Overriding predefined model methods )

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:Using pre-save signal :

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!

关于python - 在 Django 中创建另一个对象时创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56991195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com