我有一个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
模型通过CompanyForLineCharts
与foundation
模型相关联。
现在我遇到的问题是当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']
这些都没有奏效。现在该怎么办?
答案 0 :(得分:0)
@edit我很抱歉,但它不应该更改我刚检查的任何内容auto_now_add
和auto_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