我有一个序列化程序+模型,如下所示:
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
如果Entry
没有为给定日期范围内的某个日期分配Date
对象,我将使用SerializerMethodField
创建空的“填充”日期。输出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", orderable: false, priority: 5},
{data: "dates.20210203", orderable: false, priority: 5},
{data: "dates.20210204", orderable: false, priority: 5},
{data: "dates.20210205", orderable: false, priority: 5},
{data: "dates.20210206", orderable: false, priority: 5},
{data: "dates.20210207", orderable: false, priority: 5},
{data: "dates.20210208", orderable: false, priority: 6},
{data: "dates.20210209", orderable: false, priority: 6},
{data: "dates.20210210", orderable: false, priority: 6},
{data: "dates.20210211", orderable: false, priority: 6},
{data: "dates.20210212", orderable: false, priority: 6},
{data: "dates.20210213", orderable: false, priority: 6},
{data: "dates.20210214", orderable: false, priority: 6},
{data: "dates.20210215", orderable: false, priority: 7},
{data: "dates.20210216", orderable: false, priority: 7},
{data: "dates.20210217", orderable: false, priority: 7},
{data: "dates.20210218", orderable: false, priority: 7},
{data: "dates.20210219", orderable: false, priority: 7},
{data: "dates.20210220", orderable: false, priority: 7},
{data: "dates.20210221", orderable: false, priority: 7},
{data: "dates.20210222", orderable: false, priority: 8},
{data: "dates.20210223", orderable: false, priority: 8},
{data: "dates.20210224", orderable: false, priority: 8},
{data: "dates.20210225", orderable: false, priority: 8},
{data: "dates.20210226", orderable: false, priority: 8},
{data: "dates.20210227", orderable: false, priority: 8},
{data: "dates.20210228", orderable: false, priority: 8},
]
});
目前没有回答
相关问题 更多 >
编程相关推荐