gpt4 book ai didi

python - Django OneToOneField 初始化

转载 作者:行者123 更新时间:2023-12-02 20:27:49 26 4
gpt4 key购买 nike

我正在构建一个基于 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)

关于python - Django OneToOneField 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49497589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com