在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ Django 信號如何去改變一個字段屬性

Django 信號如何去改變一個字段屬性

1、Receive有Asset的外健,在領(lǐng)取其中一個資產(chǎn)的時候如何把status的值也給改變呢 ?

2、代碼:

ASSET_STATUS = (
    (0, u"空閑"),
    (1, u"領(lǐng)用"),
    (2, u"借用")
)
class Asset(models.Model):
    id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
    asset_code = models.CharField(verbose_name=u'資產(chǎn)編碼', max_length=128)

    status = models.IntegerField(verbose_name=u'資產(chǎn)狀態(tài)', choices=ASSET_STATUS, default=0)

    brand = models.CharField(verbose_name=u"資產(chǎn)品牌", max_length=64, choices=[(i, i) for i in (
        u'Apple', u"DELL", u"HP", u'Microsoft', u'聯(lián)想', u'三星', u'Acer ', u'ASUS', u"Other")])
    sn = models.CharField(verbose_name=u"序列號", max_length=64)
    buy_date = models.DateField(verbose_name=u"購買日期")
    mac_address = models.CharField(verbose_name=u"MAC地址", blank=True, null=True, max_length=64)
    cpu = models.CharField(verbose_name=u"CPU型號", max_length=64, blank=True, null=True)
    hard_disk = models.IntegerField(verbose_name=u"硬盤大小", blank=True, null=True)
    memory = models.IntegerField(verbose_name=u"內(nèi)存大小", blank=True, null=True)
    system = models.CharField(verbose_name=u"預(yù)裝系統(tǒng)", max_length=32, blank=True, null=True,
                              choices=[(i, i) for i in (u"CentOS", u"FreeBSD", u"Ubuntu", u"Windows", u"Mac os", u"無")])
    description = models.TextField(verbose_name=u"描述", blank=True, null=True)

    class Meta:
        verbose_name = u"資產(chǎn)列表"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.asset_name


class Receive(models.Model):
    people = models.ForeignKey(User, blank=True, null=True, verbose_name=u"領(lǐng)用人")
    asset = models.ForeignKey(Asset, verbose_name=u'資產(chǎn)', null=True)
    collar_time = models.DateField(u"領(lǐng)用時間", )
    operation_notes = models.TextField(u"描述", )


    def __str__(self):
        return str(self.people)

    class Meta:
        verbose_name = u'領(lǐng)用'
        verbose_name_plural = u'領(lǐng)用'

3、是否能用信號的方式來實現(xiàn),還是有其他更好的方法來實現(xiàn),非常感謝回答者對我的解惑。

回答
編輯回答
撥弦

不建議使用信號的方式處理這類問題。
屬于業(yè)務(wù)邏輯的代碼一般在views視圖中處理的時候完成。

2018年7月7日 12:54
編輯回答
她愚我

創(chuàng)建Receive記錄后就自動改了。

from django.db.models.signals import post_save,post_delete
def change_status(sender, instance, created, **kwargs):
    if created:
        instance.asset.status = 1
        instance.save()
post_save.connect(change_status, sender=Receive, dispatch_uid="change_asset_status")
2018年1月27日 15:13
編輯回答
拽很帥

參考相關(guān)的Signals文檔
http://python.usyiyi.cn/trans...
https://docs.djangoproject.co...

from django.dispatch import receiver
from django.db.models.signals import post_save

@receiver(post_save, sender=Receive)
def change_status_handler(sender, **kwargs):
    if kwargs['created']:
        obj = kwargs['instance']
        obj.asset.status = 1
        obj.save()
2017年10月25日 23:00
編輯回答
挽青絲

添加一條領(lǐng)用記錄,然后在post_save signal中把庫存數(shù)量減1?
可能需要調(diào)整model設(shè)計,讓流程更順

2017年3月19日 09:41