问题描述
class Dates(models.Model):
date: date = models.DateField(verbose_name='Datum')
indicator: str = models.CharField(max_length=1,null=True,default=None,blank=True,verbose_name='Indikator')
entry: Entry = models.ForeignKey(Entry,on_delete=models.PROTECT,related_name='dates')
class Entry(models.Model):
pass
class EntrySerializer(serializers.ModelSerializer):
bookings = SerializerMethodField() # implicitly `get_dates`
class Meta:
model = Entry
fields = (
'id','dates',)
read_only_fields = ('id',)
def get_dates(self,instance):
try:
start = self.context.request.query_params.get('start')
start = datetime.strptime(start,'%Y%m%d')
except:
start = None
d = {
date.strftime('%Y%m%d'): indicator
for (date,indicator)
in instance.dates.all().values_list("date","indicator")
}
dates = date_range(start) # just returns a list of dates
for date in dates: d.setdefault(date.strftime('%Y%m%d'),'')
return d
如果 SerializerMethodField
没有为给定日期范围内的某个日期分配 Entry
对象,我正在使用 Date
创建空的“填充”日期。输出 JSON 如下所示:
[
{
"id": 1,"bookings": {
"20210203": "D",# actual `Date` for `Entry` object
"20210204": "D",# actual `Date` for `Entry` object
"20210205": "2",# actual `Date` for `Entry` object
"20210201": "",# padding dates until the end,because
"20210202": "",# [...] the `Entry` does not yet have an
"20210206": "",# [...] associated `Date` for that date yet
"20210207": "","20210208": "","20210209": "","20210210": "","20210211": "","20210212": "","20210213": "","20210214": "","20210215": "","20210216": "","20210217": "","20210218": "","20210219": "","20210220": "","20210221": "","20210222": "","20210223": "","20210224": "","20210225": "","20210226": "","20210227": "","20210228": ""
},},...
]
当在其中一个日期上设置相应的值时,我现在尝试实际创建一个 Date
对象。同样更新,如果其中一个值在已经存在的 Date
上发生变化。
知道如何做到这一点吗?不幸的是,结构必须如此扁平,因为 Datatables Editor
不能用于列表嵌套对象。
对 DataTables 结构的澄清导致我不得不添加空的填充日期:
var table = $('#plan').DataTable({
ajax: {
url: "/api/entries/?format=datatables",rowId: 'id',order: [[0,'asc']],columns: [
{
data: 'order',className: 'reorder',{data: "entry.id"},{data: "dates.20210201",orderable: false,priority: 5},{data: "dates.20210202",{data: "dates.20210203",{data: "dates.20210204",{data: "dates.20210205",{data: "dates.20210206",{data: "dates.20210207",{data: "dates.20210208",priority: 6},{data: "dates.20210209",{data: "dates.20210210",{data: "dates.20210211",{data: "dates.20210212",{data: "dates.20210213",{data: "dates.20210214",{data: "dates.20210215",priority: 7},{data: "dates.20210216",{data: "dates.20210217",{data: "dates.20210218",{data: "dates.20210219",{data: "dates.20210220",{data: "dates.20210221",{data: "dates.20210222",priority: 8},{data: "dates.20210223",{data: "dates.20210224",{data: "dates.20210225",{data: "dates.20210226",{data: "dates.20210227",{data: "dates.20210228",]
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)