我對 Django 信號有一些問題。在將資料輸入到 PenelitiPemindahanWP 后,我想將 PermohonanWP 狀態模型欄位從“PROSES”更新為“SUCCESS”。(假設我已經將資料輸入到 PermohonanWP 模型,狀態 = 'PROSES')
這是我的model.py
class PermohonanWP(models.Model):
npwp = models.CharField(max_length=15, null=False)
nama = models.CharField(max_length=100, null=False)
status = models.CharField(max_length=20, null=True)
class PenelitiPemindahanWP(models.Model):
permohonan_pemindahan = models.ForeignKey(PermohonanWP, on_delete=models.CASCADE)
nomor_lhp = models.IntegerField(null=True)
nomor_st = models.CharField(max_length=50, null=True)
這里我的信號是在model.py中輸入的
@receiver(post_save, sender=PenelitiPemindahanWP, dispatch_uid="update_permohonan_id")
def update_permohonan(sender, instance, **kwargs):
pemohon = PermohonanWP.objects.get(id=instance.permohonan_pemindahan)
pemohon.status = "SUCCESS"
pemohon.save()
我想從 PermohonanWP 更新狀態欄位,但是每當我提交保存的按鈕時,它都不會保存并且不會更新欄位。
uj5u.com熱心網友回復:
更正這個
pemohon = PermohonanWP.objects.get(id=instance.permohonan_pemindahan)
到
pemohon = PermohonanWP.objects.get(id=instance.permohonan_pemindahan.id)
或者
甚至簡單:
pemohon = instance.permohonan_pemindahan
uj5u.com熱心網友回復:
您需要在ref 中匯入您的信號apps config ready method
應用程式.py
from django.apps import AppConfig
class <App_name>Config(AppConfig):
name = '<app name>'
def ready(self):
import <app name>.signals
初始化.py
default_app_config = '<app_name>.apps.<App_name>Config' # first letter capital
你的信號應該是這樣的
@receiver(post_save, sender=PenelitiPemindahanWP, dispatch_uid="update_permohonan_id")
def update_permohonan(sender, instance, **kwargs):
pemohon = PermohonanWP.objects.get(id=instance.permohonan_pemindahan.id)
pemohon.status = "SUCCESS"
pemohon.save()
希望它有效。
提示:
如果您為狀態欄位使用選項會更好。
在我看來,只要有可能,就應該使用整數來存盤有關某些資源狀態的資訊。這種解決方案有一個很大的優勢。向該欄位添加資料庫索引后,使用整數欄位而不是字符欄位時,搜索性能將更加高效。另一個優點是我們可以在這樣的領域中操縱排序。例如:在模型中有一個狀態欄位,允許選擇:New = 1, Draft = 2, Published = 3。如果我們想按狀態從新創建到已發布對這些 Django 模型實體進行排序,我們現在可以輕松地在該欄位上添加順序(在整數欄位上升序)。參考
一種方法;
模型.py
...
# status
PENDING = 1
PROCESSING = 2
DELIVERED = 3
CANCELED = 4
ORDER_STATUS = [
(PENDING, 'Pending'),
(PROCESSING, 'Processing'),
(DELIVERED, 'Delivered'),
(CANCELED, 'Canceled')
]
status = models.PositiveSmallIntegerField(choices=ORDER_STATUS, default=PENDING)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337567.html
上一篇:配置django記錄器每24小時執行一次寫入日志以分離檔案
下一篇:Django使用物件ID重定向?
