首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型-如何思考

Django模型-如何思考
EN

Stack Overflow用户
提问于 2016-12-30 05:11:11
回答 0查看 126关注 0票数 1

各位朋友,

随着我的系统变得越来越复杂,我需要帮助思考如何实现复杂的行为。我会解释一下:

我有三个模型: Purchase、PurchaseDetails和Stock。

模型如下:

代码语言:javascript
复制
class Purchase(models.Model):
    def __str__(self):
        return  self.parceiro_pj.razao_social + ' em ' + str(self.data) + ": " + str(self.soma)

    parceiro_pj = models.ForeignKey(ParceiroPJ,blank=True, null=True)
    createdat = models.DateTimeField()
    data = models.DateField(auto_now=True)
    soma = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

class PurchaseDetails(models.Model):

    def __str__(self):
        return str(self.parceiro_pj_insumo.insumo.nome) + ' - ' + str(self.quantidade) + ' - ' + str(self.createdat)

    purchase = models.ForeignKey(Purchase)
    parceiro_pj_insumo = models.ForeignKey(ParceiroPJInsumo)
    quantidade = models.IntegerField(blank=False, null=False)
    createdat = models.DateField(auto_now=True)

    def save(self, *args, **kwargs):
        super(PurchaseDetail, self).save(*args, **kwargs) # Call the "real" save() method.
        PurchaseDetail.objects.filter(Purchase=self.purchase.id).update(createdat=self.purchase.createdat.date())
        itens = PurchaseDetail.objects.filter(compra=self.purchase.id)
        valor = 0
        for item in itens:
            valor = valor + (item.parceiro_pj_insumo.preco * item.quantidade)

            no_estoque = Estoque.objects.get(insumo=item.parceiro_pj_insumo.insumo.id)
            unidade = Unidade.objects.get(nome=item.parceiro_pj_insumo.insumo.unidade.nome)
            qt = no_estoque.quantidade + item.quantidade
            volume_peso = no_estoque.volume_peso + (item.quantidade * item.parceiro_pj_insumo.insumo.volume_peso)
            Stock.objects.filter(insumo=item.parceiro_pj_insumo.insumo).update(quantidade=qt, unidade=unidade, volume_peso=volume_peso, updatedat=self.purchase.createdat.date())

        Purchase.objects.filter(pk=self.purchase.id).update(soma=valor)
        Purchase.objects.filter(pk=self.purchase.id).update(data=self.purchase.createdat.date())

class Stock(models.Model):

    def __str__(self):
        return str(self.insumo.nome) + '(' + str(self.insumo.marca.nome) +  ')' + ' - ' + str(self.quantidade)

    insumo = models.OneToOneField(Insumo)
    quantidade = models.IntegerField(blank=True, null=True)
    unidade = models.ForeignKey(Unidade, blank=True, null=True)
    volume_peso = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True) 
    updatedat = models.DateField(auto_now=False, blank=True, null=True)

这是相关的: a)一次购买有多个PurchaseDetails;b)每个PurchaseDetail都会对股票产生影响。对于每个PurchaseDetail操作(插入、更改、删除),必须更新库存。

我弄清楚了如何在每次插入PurchaseDetail时对股票进行更改。但是对于DELETE和UPDATE,逻辑似乎要复杂得多。

如果我编辑PurchaseDetails,它的制作方式,如果我已经在数据库中有一个项目,当我保存PurchaseDetails时,它将被再次计算(此模型在管理时嵌入了购买表单),导致错误并再次更新库存。

我不知道如何实现正确的方法。

我必须检查它是否是PurchaseDetail上的一个新项目,或者如果它是一个已经存在的注册之前更新库存,我不知道怎么做。另外,当我不得不删除PurchaseDetails和减少库存时,我也不知道如何实现这种情况。

有人能帮上忙吗?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41387239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档