0
class Medicine(models.Model):
    medicine_name = models.CharField(primary_key=True)
    price = models.IntegerField(max_length=30)

class Bill(models.Model):
    regid = models.ForeignKey(Patient)
    medicine_name = models.ForeignKey(Medicine)
    quantity = models.IntegerField()

「Bill」モデルに「price」フィールドを設定し、「price」フィールドの値を「medicine_name」に基づく「Medicine」モデルの「price」フィールドの値と同じにする必要があります。

4

2 に答える 2

1

参照するのではなく、コピーしたいと思います。将来、薬の価格が変わっても、過去の請求書は変わらないように。

したがって、同様のフィールドを追加してシグナルをBill実装pre_saveし、医薬品オブジェクトと同じ価格を設定できます。

class Bill(models.Model):
    regid = models.ForeignKey(Patient)
    medicine_name = models.ForeignKey(Medicine)
    quantity = models.IntegerField()
    price = models.IntegerField(max_length=30)

@receiver(pre_save, sender=Bill, dispatch_uid="my_unique_identifier")
def signal_price_populate(sender, **kwargs):
    try:
        inst = kwargs['instance']
        inst.price = inst.machine_name.price
    except Exception:
        #something not right
于 2012-10-30T05:50:18.360 に答える
0

すでに Medicine を ForeignKey として持っているので、この関係を通じて価格にアクセスできます。すなわち。

medicine_name__price

ただし、price の値に直接リンクされたフィールドが必要な場合は、ForeignKey の詳細な仕様を使用できます。

class Bill(models.Model):
    regid = models.ForeignKey(Patient)
    medicine_name = models.ForeignKey(Medicine)
    quantity = models.IntegerField()
    price = models.ForeignKey(Medicine, to_field="price")

詳細情報の後に更新:

Bill モデルの保存時に Medicine モデルの価格値に基づいて Bill モデルの価格フィールドを設定する場合は、モデルまたはフォームの保存時にこれを行うことができます。これは、この関係を通じて価格の値を呼び出すことができるように、medicine_name 外部キーが適切に機能していることを前提としています。

class Bill(models.Model):
    regid = models.ForeignKey(Patient)
    medicine_name = models.ForeignKey(Medicine)
    quantity = models.IntegerField()
    price = models.IntegerField(max_length=30)
    def save(self, *args, **kwargs):
        self.price = self.medicine_name.price
        super(Bill, self).save(*args, **kwargs)
于 2012-10-30T05:47:44.513 に答える