在我的django管理表单中,我有许多字段,用户可以输入浮点数。我想平均这些数字,并在提交表单时将平均值保存到相关外来对象的模型字段中。这样做的最佳方式是什么?
修改 基于fest的答案,我尝试了:
class ForeignObject(models.Model):
avg = models.FloatField()
class MyModel(models.Model):
foreign_object = models.ForeignKey(ForeignObject)
field1 = models.FloatField()
field2 = models.FloatField()
avg = models.FloatField(blank=True, null=True)
def save(*args, **kwargs):
self.foreign_object.avg = float(sum([self.field1, self.field2])) / 2
return super(models.Model, self.foreign_object).save(*args, **kwargs)
但在尝试提交管理表单时收到例外:'super' object has no attribute 'save'
。
答案 0 :(得分:2)
在模型的save()方法中设置平均值:
class MyModel(models.Model):
field1 = models.FloatField()
field2 = models.FloatField()
avg = models.FloatField(blank=True, null=True)
def save(self, *args, **kwargs):
self.avg = float(sum([self.field1, self.field2])) / 2
return super(models.Model, self).save(*args, **kwargs)
您很可能还希望将avg
字段设置为只读 - https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields
答案 1 :(得分:1)
我认为你的代码应该是:
class ForeignObject(models.Model):
avg = models.FloatField()
class MyModel(models.Model):
foreign_object = models.ForeignKey(ForeignObject)
field1 = models.FloatField()
field2 = models.FloatField()
avg = models.FloatField(blank=True, null=True)
def save(self, *args, **kwargs):
self.foreign_object.avg = float(sum([self.field1, self.field2])) / 2
self.foreign_object.save()
super(MyModel, self).save(*args, **kwargs)
这假设已经创建了self.foreign_object。 另外,save不会返回任何值,因此不需要返回。