私は他のモデルからの外部キーを使用しているモデルを持っています。 また、別の列をその外部キーの対応するフィールドに設定する必要がありますが、これを正しく行う方法がわかりません。外部キーと対応するフィールド値をモデルに取得
私はModelCで設定した関数を使ってModelAのpo_numberと一致するようにしたいのですが、save()関数のモデルBのsku_numberと一致させてください。私は、DBの構造がに似ものにするために取得できますか
Class ModelA(models.Model):
po_number = models.CharField(max_length=100)
Class ModelB(models.Model):
model_a = models.ForeignKey(ModelA, on_delete=models.PROTECT
Value = models.CharField(max_length=100)
sku_number = models.CharField(max_length=100)
def calc_received(self):
sum_value = ModelC.objects.filter(
sku_number=self.sku_number
).aggregate(
value_sum=Sum(F('value'))
)
value_received = sum_value['value_sum']
return value_received
Class ModelC(models.Model):
po_number = models.CharField(max_length=100)
sku_number = models.CharField(max_length=100)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
obj = ModelB.objects.get(
po_number=self.po_number,
sku_number = self.sku_number
)
obj.value_received = obj.calc_received()
obj.save()
:
id ModelA_id ValueFromA
_______________________________
現在、私は
def _get_valuefromB(self):
return self.ModelB.Value
value = property(_get_valuefromB
理由はありますかhyは単に 'model_instance_A.ModelB.Value'を使うことはできませんか? –
また、[Djangoのコーディングスタイル](https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/#model-style)には、大文字でフィールド名を付けています。 'Value = ...'は 'value = ...'でなければなりません。 –