Django OneToOneField初始化

奥克塔维奥

我正在构建一个基于django的应用程序,该应用程序从客户端计算机(例如内存)接收一些信息并将其保存到数据库中。

为此,我创建了以下模型:

class Machine(models.Model):
   uuid = models.UUIDField('UUID', primary_key=True, default=uuid.uuid4, editable=False)
   name = models.CharField('Name', max_length=256)
   memory = models.OneToOneField('Memory', on_delete=models.CASCADE, null=True)

   def save_data(self, data):
        if not self.memory:
            memory = Memory()
            memory.save()
            self.memory = memory
            self.save()
        self.memory.total = data['memory_total']
        self.memory.used = data['memory_used']
        self.memory.cached = data['memory_total']
        self.memory.save()

现在,对于内存,我有以下模型:

class Memory(models.Model):
    total = models.IntegerField(default=0)
    used = models.IntegerField(default=0)
    cached = models.IntegerField(default=0)

当我从客户端收到数据时,要将数据保存到机器模型中,请调用save_data()方法。我在那里测试是否已经存在一个self.memory对象,如果没有,我将在添加数据之前先创建它。

现在,即使它按预期工作了,我也想知道是否有更好,更干净的方法来实现这一目标。是否可以将我所有的OneToOne-Fields初始化为引用类型的空实例,所以我不需要每次都执行if吗?

赛特

字段接受default关键字参数。这可以是返回值的可调用对象。您可以使一个可调用的返回适当的值。在这种情况下,是新创建Memory对象的主键

def default_memory():
    mem = Memory()
    mem.save()
    return mem.pk

class Machine(models.Model):
    ...
    memory = models.OneToOneField('Memory', on_delete=models.CASCADE, null=True, default=default_memory)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django表单初始化方法失败

Django - 表单初始化如何工作?

了解Django表单初始化

在Django CMS中初始化MultipleChoiceField

如何在 Django 中初始化我的表单?

Django 模型对象什么时候初始化?

使用docker-compose初始化Django应用

Django +后台任务如何初始化

在 AppRegistry 初始化后运行系统检查 - Django Admin

初始化后Django失去与MySQL db的连接(Docker)

使用Kwargs的Django表单初始化密钥错误

Django表单初始化问题-如何在超类中设置本地化?

Django-Background-Tasks:在午夜初始化Task,并在每个午夜重复一次

在Django App中初始化GraphQL客户端的位置

如何使用Django后台任务初始化重复任务?

如何在Django模板中初始化变量并将其递增?

如何确保Django CMS初始化应用程序URL?

在Django中,如何从初始化脚本中调用子命令“ syncdb”?

Django中的单元测试:如何初始化数据库

在 ModelForm django 中使用 request.user 初始化表单并隐藏该值

如何在Django SessionWizardView中重新初始化会话变量

在 Django ModelForm 中添加和初始化自定义字段

用Django初始化数据库后如何运行postgres命令

Django 模型函数实现以自动初始化特定字段的值

如何立即初始化可变数量的Django模型字段?

如何在整个查询集上初始化 Django ModelForms?

初始化后Django在formset中生成错误数量的表单

Django初始化所有测试类的数据测试

在 ModelForm django 中使用 request.user 初始化表单