【问题标题】:Django model function to return an array (model function or manager?)Django模型函数返回一个数组(模型函数还是管理器?)
【发布时间】:2018-06-25 20:14:48
【问题描述】:

假设我有一个具有许多相关属性的模型

class ManyFields(models.Model):
  a = models.CharField(…)
  b = models.CharField(…)
  c = models.CharField(…)
  d = models.CharField(…)
  …
  # This works -ish, but am unsure if it is what is convention/needed
  def many_fields_simple_array(self):
    return [self.a,self.b,self.c,self.d,]

稍后在视图中,没有太多的房地产(比如移动),我只想提供某种连接版本的字段。而不是

<td>{{many_fields.a}}<td>
<td>{{many_fields.b}}</td>
<td>{{many_fields.c}}</td>
…

我只想拥有

<td>{{many_fields.many_fields_simple_array()}}<td>

它看起来很棒 :) 我可以处理 HTML/文本、CSS、视觉部分的渲染(每个字段都需要红灯/绿灯),但我不知道后果编写模型函数或管理器。阅读文档/介绍后我不确定。

注释/假设:

  • 我来自 JS/Angular 世界,因此我认为数组非常适合我的需要,但我想我可能会遗漏一些东西
  • 我假设是一个数组,因为在模板中我可以很容易地遍历它们。接受其他建议

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    在这种情况下,采用您当前采用的方法并在模型中编写函数是有意义的。在 Python 中,类中的函数称为method,因此我们使用术语model method

    Django 中对象的管理器用于确定如何通过Model.objects.&lt;query_function&gt; 执行对该模型的查询。在您的情况下,您希望对模型的单个实例进行不同/唯一的处理,而不一定要对模型的查询有所不同。因此,为 ManyFields 模型的实例获取所需行为的模型方法非常有意义。

    此外,最佳实践是将模型方法作为自定义字段添加到用于检索前端数据的序列化程序中。 This Stack Overflow answer 展示了如何做到这一点。通过这样做,您的对象将准备好访问该字段,这样您就可以获得所需的简短版本。

    【讨论】:

      【解决方案2】:

      使用此行将返回字典中的值。 ManyFields.objects.filter(name='Beatles').values()

      [{'a': 1, 'b': 'Beatles Blog', 'c': 'All the latest Beatles news.'}]

      在这里回答了类似的问题:Printing Objects in Django

      【讨论】:

        猜你喜欢
        • 2012-09-05
        • 1970-01-01
        • 2022-08-11
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        • 2012-06-21
        相关资源
        最近更新 更多