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,因此您可以通过这种关系访问价格。IE。

medicine_name__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 模型中设置价格字段,您可以在保存模型或表单时执行此操作。这是假设您的医学名称外键工作正常,以便我们可以通过这种关系调用价格的值。

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 回答