Python 实例化模型时创建默认的相关对象
给出了两个抽象模型Python 实例化模型时创建默认的相关对象,python,django,Python,Django,给出了两个抽象模型A和B: class A(models.Model): some_field = models.Field(...) ... class B(models.Model): a = models.ForeignKey(A, ...) some_integer = models.IntegerField(...) ... 如何在每次创建模型a的新记录时创建模型B的一组相关对象 因此,例如,默认情况下,对于每个新的A记录,在1到3的某个整
A
和B
:
class A(models.Model):
some_field = models.Field(...)
...
class B(models.Model):
a = models.ForeignKey(A, ...)
some_integer = models.IntegerField(...)
...
如何在每次创建模型a
的新记录时创建模型B
的一组相关对象
因此,例如,默认情况下,对于每个新的A
记录,在1
到3
的某个整型
字段中存储了3条相关的B
记录,它们的值不同
目前最直接的方法似乎是:
@receiver(models.signals.post_save, sender=A)
def create_default_b_objects(sender, instance, created, **kwargs):
if created:
#create related instances of model B
...
但也许有更优雅的方法,可以使用或描述在?中。您可以使用
models.ForeignKey
字段,并为其默认值参数赋予适当的功能
例如:
def get_default_a_id():
# you can place logic here which would create appropriate object
# or return default shared object as it is in this example
return A.objects.get(field="Field value which distinguishes default object").pk
class B(models.Model):
a = models.ForeignKey(A,
on_delete=models.deletion.PROTECT,
default=get_default_a_id)
信号是最优雅的方式