平均来自django管理表单的输入并将其添加到模型字段

时间:2012-05-26 19:10:04

标签: django forms admin

在我的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'

2 个答案:

答案 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不会返回任何值,因此不需要返回。

相关问题