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'模型中基于'medicine_name'的'price'字段的值相同< / p>
答案 0 :(得分: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
答案 1 :(得分:0)
由于您已经将Medicine作为ForeignKey,您可以通过此关系访问价格。即
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模型时根据药物模型中的价格值在Bill模型中设置价格字段,您可以在保存模型或表单时执行此操作。这假设您的medicine_name foreignkey正常工作,以便我们可以通过此关系调用价格的值。
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)