0

I'm trying to create 52 objects of this model, (each corresponding 52 weeks of the year):

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)

and my signal function is like this (when I do this, I get only one object instead of expected 52; I get only week 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)

and when I put the for loop in outer scope, (I get only one object instead of expected to 52; I get only week 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)

What can I do to fix this, so that 52 objects of WeeklyMemo class are created?

Kiran Racherla
  • 219
  • 3
  • 12
  • post_save is that it work after save method. So you can get only last created instance in post_save. If you want to all objects, you can't in post_save. – Ali Yaman Dec 16 '19 at 17:10
  • 2
    a `OneToOne` field is what it says: one `WeeklyMemo` can only have one `Master` and vice versa. So you **can't** create 52 objects related to the same `Master` unless you change the relationship to a one-to-many. – dirkgroten Dec 16 '19 at 17:13
  • @dirkgroten, It didn't strike at that moment, I chaged it to `models.ForeignKey` and it seems to be working as intended – Kiran Racherla Dec 16 '19 at 17:19

0 Answers0