0

私のdjango管理フォームには、ユーザーが浮動小数点数を入力できるフィールドがいくつかあります。これらの数値を平均し、フォームが送信されたときに関連する異物のモデル フィールドに平均を保存したいと考えています。これを行う最善の方法は何ですか?

編集: 私が試した以下のフェストの答えに基づいて:

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'管理フォームを送信しようとしたとき。

4

2 に答える 2

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

于 2012-05-26T19:36:11.883 に答える
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は値を返さないため、返す必要はありません。

于 2012-05-26T23:33:06.857 に答える