簡體   English   中英

如何遵循提示:改用可調用對象,例如,使用 `dict` 代替 `{}`?

[英]How to follow HINT: Use a callable instead, e.g., use `dict` instead of `{}`?

如何遵循警告?

models.py

from django.contrib.postgres.fields import JSONField
from django.db import models
from django_extensions.db.models import TimeStampedModel


class UnderwritingValidator(TimeStampedModel):
    plan = models.PositiveIntegerField(null=True, blank=True, unique=True)
    logic = JSONField(default=dict(
        accept_list=[],
        reject_list=[]
    ))

然后makemigrations

WARNINGS:
uw_validators.UnderwritingValidator.logic: (postgres.E003) JSONField default should be a callable instead of an instance so that it's not shared between all field instances.
    HINT: Use a callable instead, e.g., use `dict` instead of `{}`.
Migrations for 'uw_validators':
  uw_validators/migrations/0002_auto_20191011_0321.py
    - Remove field accept_list from underwritingvalidator
    - Remove field reject_list from underwritingvalidator
    - Add field logic to underwritingvalidator

軟件:

postgres:10.9
Django==2.2.5

問題:

  1. 我可以避免錯誤嗎? 如果安全,我將忽略此警告並刪除我的簡短警告說明
  2. 如何完全遵守警告?

那不是可調用的。

您在這里有兩個選擇:

  1. 依賴dict作為默認值; 如果沒有提供,這將導致您的模型使用空的 dict {}
class UnderwritingValidator(TimeStampedModel):
    plan = models.PositiveIntegerField(null=True, blank=True, unique=True)
    logic = JSONField(default=dict)
  1. 創建您自己的“可調用”並將其用作默認值:
def get_default_something():
    return {'accept_list': [], 'reject_list': []}

class UnderwritingValidator(TimeStampedModel):
    plan = models.PositiveIntegerField(null=True, blank=True, unique=True)
    logic = JSONField(default=get_default_something)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM