【问题标题】:Creating model instance in another app在另一个应用程序中创建模型实例
【发布时间】:2023-03-20 16:48:01
【问题描述】:

我在一个应用程序中有一个系统模型,我想将它连接到另一个应用程序 (django-helpdesk) 中的队列模型。如果没有为 System object 选择 Queue 对象,我想初始化一个新的 Queue 对象,使用来自 System 的信息来生成它。

我已经介绍了队列的所有必填字段,但这似乎不起作用。它不会抛出错误;它只是从不生成新的 Queue 对象。谁能发现有问题的问题,或推荐另一种解决方法?

#models.py

import helpdesk

....

class System(models.Model):
    queue = models.ForeignKey(
        helpdesk.models.Queue,
        blank = True,
        null = True,
        editable = True,
        verbose_name = _('Queue'),
    )

    def __save__(self, *args, **kwargs):
        if not self.queue:
            slug = slugify(self.name)
            queue = helpdesk.models.Queue(title=self.name, slug=slug)
            queue.save()
        self.queue = queue.pk
        super(System, self).save(*args, **kwargs)

编辑:作为参考,除了对save() 方法使用双下划线之外,还有一个错误。 self.queue = queue.pk 应该改为 self.queue = queue

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您应该重写 save() 方法,而不是 __save__(),参见示例:

    【讨论】:

    • 不敢相信我忽略了这一点。谢谢!
    【解决方案2】:

    重命名:

    def __save__(...)
    

    def save(...)
    

    【讨论】:

      【解决方案3】:

      save() 方法中不需要双下划线。这仅适用于 Python 魔术方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2023-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        相关资源
        最近更新 更多