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)

信号是最优雅的方式