首页 > 解决方案 > 如何通过触发 django post_save 信号创建相同模型的多个对象

问题描述

我正在尝试创建此模型的 52 个对象(每年对应的 52 周):

from django.db.models import OneToOneField, TextField, IntegerField, Model, CASCADE
from main_app.models import Master

class WeeklyMemo(Model):
    master = OneToOneField(Master, on_delete=CASCADE)
    week_of_year = IntegerField(null=True)
    comments = TextField(null=True)

我的信号功能是这样的(当我这样做时,我只得到一个对象而不是预期的 52 个;我只得到第 1 周)

from django.db.models.signals import post_save
from django.dispatch import receiver
from main_app.models import Master
from memo.models import WeeklyMemo

@receiver(post_save, sender=Master)
def create_weekly_memo_objects(sender, instance,  **kwargs):
    for week in range(1, 53):
        WeeklyMemo.objects.create(master=instance, week_of_year=week)

当我将 for 循环置于外部范围时,(我只得到一个对象,而不是预期的 52 个;我只得到第 52 周

for week in range(1, 53):
    @receiver(post_save, sender=Master)
    def create_weekly_memo_objects(sender, instance,  **kwargs):
        WeeklyMemo.objects.create(master=instance, week_of_year=week)

我能做些什么来解决这个问题,以便WeeklyMemo创建 52 个类对象?

标签: djangopython-3.6django-signals

解决方案


推荐阅读