我正在构建一个基于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] 删除。
我来说两句