当前位置: 首页 > 面试题库 >

如何在信号中使用Django模型继承?

谷梁浩思
2023-03-14
问题内容

我在Django中有一些模型继承级别:

class WorkAttachment(models.Model):
    """ Abstract class that holds all fields that are required in each attachment """
    work            = models.ForeignKey(Work)
    added           = models.DateTimeField(default=datetime.datetime.now)
    views           = models.IntegerField(default=0)

    class Meta:
        abstract = True


class WorkAttachmentFileBased(WorkAttachment):
    """ Another base class, but for file based attachments """
    description     = models.CharField(max_length=500, blank=True)
    size            = models.IntegerField(verbose_name=_('size in bytes'))

    class Meta:
        abstract = True


class WorkAttachmentPicture(WorkAttachmentFileBased):
    """ Picture attached to work """
    image           = models.ImageField(upload_to='works/images', width_field='width', height_field='height')
    width           = models.IntegerField()
    height          = models.IntegerField()

WorkAttachmentFileBased和继承了许多不同的模型WorkAttachment。我想创建一个信号attachment_count,当创建附件时,该信号将更新父工作的字段。认为为父发件人(WorkAttachment)发出的信号也会在所有继承的模型上运行,这是合乎逻辑的,但事实并非如此。这是我的代码:

@receiver(post_save, sender=WorkAttachment, dispatch_uid="att_post_save")
def update_attachment_count_on_save(sender, instance, **kwargs):
    """ Update file count for work when attachment was saved."""
    instance.work.attachment_count += 1
    instance.work.save()

有没有办法使此信号对所有继承自其的模型起作用WorkAttachment

Python 2.7,Django 1.4 pre-alpha

附言:我已经尝试了在网上找到的一种解决方案,但是它对我不起作用。


问题答案:

您可以尝试类似:

model_classes = [WorkAttachment, WorkAttachmentFileBased, WorkAttachmentPicture, ...]

def update_attachment_count_on_save(sender, instance, **kwargs):
    instance.work.attachment_count += 1
    instance.work.save()

for model_class in model_classes:
    post_save.connect(update_attachment_count_on_save, 
                      sender=model_class, 
                      dispatch_uid="att_post_save_"+model_class.__name__)

(免责声明:我尚未测试以上内容)



 类似资料:
  • 我正在做一个项目,我需要使用几个DateTime字段,我已经在我的模型中定义了,然后在模板中,我正在使用https://tempusdominus.github.io/bootstrap-4/插件,但是当我提交表单时,有两个问题来吧: 1) :Django说为所有DateTime字段输入有效的日期/时间(2):选择有效选项<代码>[“玉米油”]不是可用选项之一。 以下是我尝试过的: 从: 从: 从

  • 问题内容: 我正在尝试学习python / django。 现在,我在models.py中拥有了所有模型 是否可以分解我的模型,以便每个模型在单独的models文件夹中可以有一个文件,以便可以执行以下操作: 问题答案: 有可能,只需确保将__init__.py在models目录中创建的所有模型导入。在你的情况下,它看起来像这样: 这需要完成,因为Django查找应用程序的模型。 正如其他人提到的那

  • 问题内容: 我在想,如果以下迁移是可能的Django的南部和仍然保留的数据。 之前: 我目前有两个应用程序,一个叫做电视,一个叫做电影,每个都有一个VideoFile模型(在这里简化): tv/models.py: movies/models.py: 后: 因为这两个videofile对象是如此相似,所以我想摆脱重复并在一个名为media的单独应用中创建一个新模型,其中包含通用的VideoFile

  • 具有以下类别: 和 和 和 和 和 因此,应用程序需要动态实例化步骤子类对象,相应地设置配置并运行步骤,如下所示。 错误消息: "方法setConfig(捕获#8-of?扩展Config)在类型Step中 查看文档,在这种情况下,Java看起来不友好:https://docs.oracle.com/javase/tutorial/java/generics/wildcardGuidelines.h

  • def validate_mobile_number(value):如果不是str(value).isdigit():引发ValidationError(“请输入有效的手机号码”)类ModelA(AbstractUser): mobile=models.CharField(u(“mobile”),unique=True,max_length=10,验证器[validate_mobile_numbe

  • 起源: 儿童1: 我正在使用Hibernate映射在MySQL中创建表。我对冬眠是完全陌生的。正在创建表,并且子表有一个外键,它引用父表id,正如我提到的@PrimaryKeyJoinColumn注释。在子表中添加字段也会在扩展时将其添加到父表中。但删除父表中的行不会删除子表中的行。也许我在某个地方走错了路。我的最终目标是扩展父表,并使用子表向其添加记录。我需要一些指针。也许是其他注释,或者其他实