【问题标题】:Django dates getting sorted wrong DRFDjango 日期排序错误 DRF
【发布时间】:2016-08-09 11:45:28
【问题描述】:

我有一个 django 模型-

class CompanyForLineCharts(models.Model):
  company = models.TextField(null=True)

class LineChartData(models.Model):
  foundation = models.ForeignKey(CompanyForLineCharts, null=True)
  date = models.DateField(auto_now_add=False)
  price = models.FloatField(null=True)

以及这些模型的视图-

arr = []
for i in range(len(entereddate)):
  date = entereddate[i]
  if entereddate[i] in dates:
    foundat = (dates.index(entereddate[i]))
  allprices = Endday.objects.raw("SELECT id, eop FROM drf_endday where company=%s", [comp[i]])
  allendofdayprices = ''
  for a in allprices:
    allendofdayprices=(a.eop)
    tempprices = allendofdayprices.split(',')
    stringprices = tempprices[foundat:]
    finald = dates[foundat:]
    finalp = []
    for t in range(len(stringprices)):
      finalp.append(float(re.sub(r'[^0-9.]', '', stringprices[t])))
      company = CompanyForLineCharts.objects.get(company=comp[i])
    for j in range(len(finalp)):
      arr.append(
         LineChartData(
           foundation = company,
           date = finald[j],
           price = finalp[j]
         )
      )
LineChartData.objects.bulk_create(arr)

entereddate 是用户输入的日期列表(日期对象),dates 是日期的大列表(也是日期对象,按时间顺序),tempprices 是对应的价格列表到dates 列表。

我为这些设置了序列化程序-

class LineChartDataSerializer(serializers.ModelSerializer):
  class Meta:
    model = LineChartData
    fields = ('date','price')

class CompanyForLineChartsSerializer(serializers.ModelSerializer):
 data = LineChartDataSerializer(many=True, source='linechartdata_set')
   class Meta:
   model = CompanyForLineCharts
   fields = ('company', 'data')

如您所见,LineChartData 模型通过 foundation 关联到 CompanyForLineCharts 模型。

现在我面临的问题是当 drf 序列化这些字段时,日期的顺序变得混乱。

所以我也尝试了这些-

  • 在视图中-

    xy = zip(finald, finalp) sort = sorted(xy) finald = [x[0] for x in sort] finalp = [x[1] for x in sort]

    嗯,这并没有改变序列化输出中的任何顺序。

  • 所以我尝试订购序列化程序-

    order_by = (('date',)) ordering = ['-date']

而且他们都没有工作。现在该怎么办?

【问题讨论】:

    标签: python django date django-rest-framework


    【解决方案1】:

    @edit 我很抱歉,但它不应该改变任何我刚刚检查过的文档,auto_now_addauto_now 的默认值是False

    DateField(auto_now_add=False) -> DateField(auto_now_add=False, auto_now=False) 应该可以解决您的问题。
    如果auto_now 为真,那么它会在每次调用.save() 方法时设置日期。 auto_now_add 在您调用构造函数时执行相同操作。
    auto_now 用于您需要上次修改日期,而auto_now_add 用于您需要创建日期。
    您不属于这些原因中的任何一个,因此您需要将两个参数都设置为 False

    【讨论】:

    • 不,没有这样做。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多