Django模型自定义方法

时间:2018-06-18 21:58:35

标签: django django-models django-views

有没有办法从视图中调用特定的模型自定义方法?我需要根据我的模型上的字段的视图减去或增加,我想为这两个选项中的每一个创建一个按钮,并在输入数据后更新我的数据库中的字段。如果是这样我怎么去实现它,目前我的保存方法是立即执行两个操作

models.py

class Items(models.Model):
    nombre = models.CharField(max_length=250)
    descripcion = models.CharField(max_length=250)
    codigo_proveedor = models.CharField(max_length=250)
    categoria = models.ForeignKey('Categorias', on_delete=models.CASCADE)
    c_minima = models.PositiveIntegerField()
    c_actual = models.PositiveIntegerField()
    c_descuento = models.PositiveIntegerField(blank=True)
    c_incremento = models.PositiveIntegerField(blank=True)
    proveedor = models.ForeignKey('Proveedores', on_delete=models.CASCADE)
    carrito = models.ForeignKey('Carrito', on_delete=models.CASCADE, null=True )
    p_unitario = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True )
    total = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    material = models.ForeignKey(Materiales, null=True, blank=True)
    tipo = models.ForeignKey(Tipo, null=True, blank=True)
    active = models.BooleanField()

    def save(self, *args, **kwargs):
        self.c_actual = self.c_actual - self.c_descuento
        self.c_actual =self.c_actual + self.c_incremento 
        self.total = self.c_actual * self.p_unitario
        super(Items, self).save(*args, **kwargs)


    def __str__(self):
        return '%s %s %s %s' % (self.nombre, str(self.categoria), str(self.c_actual), str(self.total))

1 个答案:

答案 0 :(得分:0)

您可以在模型上使用实例方法,例如与get_absolute_url()完全一样。 您可以在模型定义增量,减量和总计中添加3个方法,并在其中写入相应的逻辑。

所以views.py文件中的视图类似于

def some_view(request, *args, **kwargs):

    #read the post data values from req

    #create model instance
    data = Items( #key value pairs)

    #read from req to increament or decrement
    if incr: 
        data.increament()
    else: 
        data.decrement()

    data.total() 

    data.save()

    return render( ... )