我有一个信号文件,我希望在每次创建一个子级时都运行它。由于某种原因,它为一个子项创建了默认信息,但如果添加了另一个子项,则不会创建默认信息。对其他用户也不起作用,由于某种原因,它只对我的帐户起作用。
signals.py文件:
from django.db.models.signals import post_save
from django.dispatch import receiver
from children.models import Children
from .models import Timeline
@receiver(post_save, sender=Children)
def init_new_child(instance, created, raw, **kwargs):
# raw is set when model is created from loaddata.
if created and not raw:
Timeline.objects.create(header = "Financial Support", age = "0-4",children=instance)
Timeline.objects.create(header = "Financial Support", age = "4-11",children=instance)
Timeline.objects.create(header = "Financial Support", age = "11-18",children=instance)
Timeline.objects.create(header = "Financial Support", age = "18-25",children=instance)
Timeline.objects.create(header = "Educational Support", age = "0-4",children=instance)
Timeline.objects.create(header = "Educational Support", age = "4-11",children=instance)
Timeline.objects.create(header = "Educational Support", age = "11-18",children=instance)
Timeline.objects.create(header = "Educational Support", age = "18-25",children=instance)
Timeline.objects.create(header = "Governmental Support", age = "0-4",children=instance)
Timeline.objects.create(header = "Governmental Support", age = "4-11",children=instance)
Timeline.objects.create(header = "Governmental Support", age = "11-18",children=instance)
Timeline.objects.create(header = "Governmental Support", age = "18-25",children=instance)
Timeline.objects.create(header = "Charity Support Groups", age = "0-4",children=instance)
Timeline.objects.create(header = "Charity Support Groups", age = "4-11",children=instance)
Timeline.objects.create(header = "Charity Support Groups", age = "11-18",children=instance)
Timeline.objects.create(header = "Charity Support Groups", age = "18-25",children=instance)
Timeline.objects.create(header = "Therapy Support", age = "0-4",children=instance)
Timeline.objects.create(header = "Therapy Support", age = "4-11",children=instance)
Timeline.objects.create(header = "Therapy Support", age = "11-18",children=instance)
Timeline.objects.create(header = "Therapy Support", age = "18-25",children=instance)
Timeline.objects.create(header = "Transport Support", age = "0-4",children=instance)
Timeline.objects.create(header = "Transport Support", age = "4-11",children=instance)
Timeline.objects.create(header = "Transport Support", age = "11-18",children=instance)
Timeline.objects.create(header = "Transport Support", age = "18-25",children=instance)
儿童模型:
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.urls import reverse
DIAGNOSIS_CHOICES = [
(1, ("Yes")),
(2, ("No"))
]
class Children(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.CharField(max_length=100)
diagnosis = models.IntegerField(
choices= DIAGNOSIS_CHOICES,
)
disability = models.CharField(max_length=100)
parent = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.first_name + " " + self.last_name
def get_absolute_url(self):
return reverse('children-detail', kwargs={'pk': self.pk})*
时间线模型:
from django.db import models
from django.contrib.auth.models import User
from posts.models import PDF
from children.models import Children
HEADER_CHOICES = [
('Financial Support', 'Financial Support'),
('Educational Support', 'Educational Support'),
('Governmental Support', 'Governmental Support '),
('Charity Support Groups', 'Charity Support Groups'),
('Therapy Support', 'Therapy Support '),
('Transport Support', 'Transport Support ')
]
AGE_CHOICES = [
('0-4', '0-4'),
('4-11', '4-11'),
('11-18', '11-18'),
('18-25', '18-25')
]
class Timeline(models.Model):
header = models.CharField(max_length=30, choices=HEADER_CHOICES)
age = models.CharField(max_length=6, choices=AGE_CHOICES)
child = models.OneToOneField(Children, on_delete=models.CASCADE)
class Pdf(models.Model):
pdf = models.FileField(upload_to='timelinepdfs')
timeline = models.ForeignKey(Timeline, on_delete=models.CASCADE)
发布于 2020-04-07 15:14:19
注意,该函数接受一个发送方参数以及通配符关键字参数(**kwargs);所有信号处理程序都必须接受这些参数。
因此,Django文档没有明确说明sender是关键字参数还是位置参数。从最新的2.2代码来看,它看起来确实是一个关键字arg,但我只检查了一个版本。您可以尝试添加sender作为第一个参数。
from children.models import Children
from .models import Timeline, HEADER_CHOICES, AGE_CHOICES
@receiver(post_save, sender=Children)
def init_new_child(sender, instance, created, raw, **kwargs):
# raw is set when model is created from loaddata.
if created and not raw:
# Just a DRY suggestion:
for header in HEADER_CHOICES:
for age in AGE_CHOICES:
Timeline.objects.create(
header=header[0],
age=age[0],
child=instance
)
https://stackoverflow.com/questions/61033856
复制相似问题