Django模型函数返回一个数组(模型函数或管理器?)

时间:2018-01-17 02:38:19

标签: django django-models

假设我有一个模型,其中包含许多与之相关的属性

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世界,所以我认为数组对于我需要的东西是完美的,但我想我可能会遗漏一些东西
  • 我假设一个数组,因为在模板中我可以很容易地迭代它们。打开其他建议

2 个答案:

答案 0 :(得分:1)

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

Django中对象的管理器用于确定如何通过model method执行对该模型的查询。在您的情况下,您希望以不同/唯一的方式处理模型的单个实例,而不一定是为了使模型的查询不同。因此,获得ManyFields模型实例所需行为的模型方法非常有意义。

此外,最佳做法是将模型方法作为自定义字段添加到用于检索前端数据的序列化程序。 This Stack Overflow answer显示了如何执行此操作。通过这样做,您的对象将准备好访问该字段,以便您可以使用您正在寻找的简短版本。

答案 1 :(得分:0)

使用此行将返回字典中的值。 $("#pinField").on('change',function() { var pin = $("#pinField").val(), $.cookie('pin', pin); });

ManyFields.objects.filter(name='Beatles').values()

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