django 如何将另一个模型中的字段保存到变量NOT A FIELD

plicqrtu  于 2023-05-23  发布在  Go
关注(0)|答案(1)|浏览(226)

我有一个叫做Actual的模型:

# Actual parts table
class Actual(models.Model):
    vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE, verbose_name="Vendor name", related_name="actualvendor")       
    number = models.CharField("External part number", max_length=32, unique=True, blank=True, null=True)     
    description = models.CharField(max_length=64, blank=True)                                     
    pq = models.DecimalField(max_digits=7, decimal_places=2, default=1)                                                           
    mrrp = models.DecimalField(max_digits=10, decimal_places=2)     
    # Model metadata
    class Meta:
        unique_together = ["vendor", "number"]
        verbose_name_plural = "actual external parts"
    # Display below in admin 
    def __str__(self): 
       return f"{self.number}"

我还有另一个模型叫Offer:

class Offer(models.Model):
    sync_id = models.ForeignKey(Sync, on_delete=models.CASCADE, verbose_name="Internal part number", related_name="part")
    discount = models.DecimalField(max_digits=3, decimal_places=2, default=0)   
    moq = models.DecimalField(max_digits=4, decimal_places=2, default=1)                                              
    status = models.CharField(max_length=20, choices=OFFERSTATUS_CHOICES, default=1)
    actual = models.OneToOneField(Actual, on_delete=models.CASCADE)
    # Display something in admin
    def __str__(self):
        return f"Offer {self.id} for {self.sync_id}"

    # Calculate the price
    def price(self):
        return self.actual.mrrp * (1-self.discount)

我试图用“mrrp”计算“报价”模型中的“价格”,但“mrrp”来自“实际”模型。
我可以用我附加的代码来实现,但正如你在django管理中看到的,'actual'显示为一个字段。我不希望它显示为字段。我只是希望'actual'是一个等于'mrrp'值的变量。这样我就可以用它来计算价格了。

是否有其他方法引用其他模型中的字段?田地不是唯一的办法吧?

nwwlzxa7

nwwlzxa71#

我和一个房地产设计师解决了这个问题。我的想法是正确的,但没有在计算价格的函数上放置属性装饰器。使用属性装饰器来显示数据,就像你在Django中显示字段一样。
我在模型的底部添加了以下内容:

@property
    def price(self):
        return self.actual.mrrp * (1-self.discount)

相关问题