前提・実現したいこと
calibration_dateをtodayなどで入力してその何年後かをnext_calibration_dateに表示させる。
選択したcalibration_typeによってCALIBRATION_CHOICESから参照して次の指定日を自動で入力。管理画面でreadonlyで表示させる。
readonly→これはadminでできているので多分いいと思ってます。
python
1_models.py 2 3 4CALIBRATION_CHOICES = ( 5 (0,'1年校正'), 6 (1,'2年校正'), 7 (2,'5年校正'), 8 (3,'10年校正'), 9) 10 11SPEC3_CHOICES = ( 12 (1, 'A'), 13 (2, 'D'), 14) 15 16 17class InsLedger(models.Model): 18 measuring_ins_group = models.IntegerField(choices=MEASURING_INS_GROUP_CHOICES,default=1) 19 measuring_tool = models.ForeignKey(Device, on_delete=models.CASCADE) 20 ins_num = models.CharField(max_length=10) 21 calibration_type = models.IntegerField(choices=CALIBRATION_CHOICES)#校正期間 22 calibration_date = models.DateField(default=now)#datetime.datetime.now()) 23 next_calibration_date = models.DateField() 24 serial_num = models.CharField(max_length=20, null=True, blank=True, default='') 25 product_num = models.ForeignKey(Product_num, on_delete=models.CASCADE)#対象品番 26 team = models.ForeignKey(TeamModel, on_delete=models.CASCADE, related_name='teams1') 27 line = models.ForeignKey(LineModel, on_delete=models.CASCADE, related_name='lines1') 28 useapp = models.ForeignKey(Useapp, on_delete=models.CASCADE)#使用用途 29 spec1 = models.ForeignKey(Spec1, on_delete=models.CASCADE)#最小目盛 30 spec2 = models.ForeignKey(Spec2, on_delete=models.CASCADE)#測定範囲 31 spec3 = models.IntegerField(choices=SPEC3_CHOICES)#表示 32 check_items = models.ForeignKey(Check_Items, on_delete=models.CASCADE)#日常点検項目 33 34 def save(self, *args, **kwargs): 35 auto_now = kwargs.pop('next_calibration_date_auto_now', True) 36 if auto_now: 37 if self.calibration_type == CALIBRATION_CHOICES[0]: 38 calibration_span = 1 39 elif self.calibration_type == CALIBRATION_CHOICES[1]: 40 calibration_span = 2 41 elif self.calibration_type == CALIBRATION_CHOICES[2]: 42 calibration_span = 5 43 elif self.calibration_type == CALIBRATION_CHOICES[3]: 44 calibration_span = 10 45 46 self.next_calibration_date = self.calibration_date + relativedelta(years=calibration_span) 47 48 super().save(*args, **kwargs) 49 50 def __str__(self): 51 return str(self.measuring_tool)
python
1_admin.py 2 3class InsLedgerAdmin(admin.ModelAdmin): 4 list_display = ('measuring_ins_group','measuring_tool','ins_num','team','line','calibration_date', 'next_calibration_date') 5 list_filter = ["measuring_ins_group"] 6 search_fields = ['measuring_ins_group'] 7 readonly_fields = ('next_calibration_date',) 8admin.site.register(InsLedger, InsLedgerAdmin) 9
runserverを動かして登録したところ以下のようなメッセージが出る。
発生している問題・エラーメッセージ
UnboundLocalError at /admin/ins_ledger1/insledger/add/ local variable 'calibration_span' referenced before assignment Django Version: 3.2.5 Exception Type: UnboundLocalError Exception Value: local variable 'calibration_span' referenced before assignment Exception Location: ―--/ins_ledger1/models.py, line 72, in save 72 self.next_calibration_date = self.calibration_date + relativedelta(years=calibration_span)
試したこと
global変数での指定。
補足情報(FW/ツールのバージョンなど)
どなたかわかる方ご教授お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。