实例化模型时创建默认的相关对象

时间:2019-11-12 11:16:38

标签: python django

给出两个抽象模型AB

class A(models.Model):
    some_field = models.Field(...)
    ...


class B(models.Model):
    a = models.ForeignKey(A, ...)
    some_integer = models.IntegerField(...)
    ...

每次创建模型B的新记录时,如何创建模型A的一组相关对象?

因此,例如,默认情况下,对于每个新的A记录,有3条相关的B记录在some_integer字段中存储着从13的不同值

目前,最直接的方法似乎是在使用:

@receiver(models.signals.post_save, sender=A)
def create_default_b_objects(sender, instance, created, **kwargs):
    if created:
        #create related instances of model B
        ...

但是也许使用data migrations中所述的fixturesdjango documentation会有更优雅的方式吗?

1 个答案:

答案 0 :(得分:-1)

您可以使用models.ForeignKey字段并为其default参数赋予适当的功能。

示例:

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)