首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django表示默认数据只适用于一个孩子,但不适用于多个孩子

Django表示默认数据只适用于一个孩子,但不适用于多个孩子
EN

Stack Overflow用户
提问于 2020-04-05 03:46:02
回答 1查看 102关注 0票数 0

我有一个信号文件,我希望在每次创建一个子级时都运行它。由于某种原因,它为一个子项创建了默认信息,但如果添加了另一个子项,则不会创建默认信息。对其他用户也不起作用,由于某种原因,它只对我的帐户起作用。

signals.py文件:

代码语言:javascript
运行
复制
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)

儿童模型:

代码语言:javascript
运行
复制
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})*

时间线模型:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-04-07 15:14:19

来自Django documentation

注意,该函数接受一个发送方参数以及通配符关键字参数(**kwargs);所有信号处理程序都必须接受这些参数。

因此,Django文档没有明确说明sender是关键字参数还是位置参数。从最新的2.2代码来看,它看起来确实是一个关键字arg,但我只检查了一个版本。您可以尝试添加sender作为第一个参数。

代码语言:javascript
运行
复制
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
                )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61033856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档