【问题标题】:get_FIELD_display() does not display correct valueget_FIELD_display() 不显示正确的值
【发布时间】:2019-06-18 06:13:48
【问题描述】:

我一直在尝试在我的 API 视图中使用 get_name_display(),但它不显示文本,只显示数字。我已经检查了文档,但它没有提到任何关于它的内容 - 它应该可以工作。可能与 perform_update() 方法有关吗? 例如,下面的代码打印 3 而不是 'GaussianNB'。

型号

class Algorithm(models.Model):
    ALGORITHM_NAME = (
        (0, 'KNeighborsClassifier'),
        (1, 'LogisticRegression'),
        (2, 'LinearSVC'),
        (3, 'GaussianNB'),
        (4, 'DecisionTreeClassifier'),
        (5, 'RandomForestClassifier'),
        (6, 'GradientBoostingClassifier'),
        (7, 'MLPClassifier'),
    )

    name = models.CharField(max_length=64, choices=ALGORITHM_NAME)
    parameters = JSONField()

查看

class CalcUpdateView(UpdateAPIView):
    queryset = Calc.objects.all()
    serializer_class = CalcSerializer

    def perform_update(self, serializer):
        instance = serializer.save()
        algorithm = Algorithm.objects.get(pk=self.request.data['algorithm'])
        print(algorithm.get_name_display())

提前感谢您的帮助!

【问题讨论】:

  • This 可能会对你有所帮助。
  • 可能nameCharFieldALGORITHM_NAME 中每个元组的第一个元素是整数这一事实在某种程度上困扰着Django?尝试将每个元组的第一个元素更改为字符串或将 name 字段更改为 IntegerField
  • ivissani,不知道为什么,但是将数字更改为字符串有帮助!
  • 我会把评论变成答案

标签: python django


【解决方案1】:

可能nameCharFieldALGORITHM_NAME 中每个元组的第一个元素是整数这一事实在某种程度上困扰着Django。 尝试将每个元组的第一个元素更改为字符串:

ALGORITHM_NAME = (
    ('0', 'KNeighborsClassifier'),
    ('1', 'LogisticRegression'),
    ('2', 'LinearSVC'),
    ('3', 'GaussianNB'),
    ('4', 'DecisionTreeClassifier'),
    ('5', 'RandomForestClassifier'),
    ('6', 'GradientBoostingClassifier'),
    ('7', 'MLPClassifier'),
)

或将name 字段更改为IntegerField

name = models.IntegerField(choices=ALGORITHM_NAME)

【讨论】:

  • 所以看起来它只适用于choice 字段,而不适用于任何模型字段?
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2019-02-22
  • 2017-07-18
相关资源
最近更新 更多