我有一个具有分层课程,笔记和任务模型的应用程序。也就是说,每个Course都有一堆由ForeignKey指向它的Note实例,每个Note都有一堆指向它的Task实例。
我希望所有内容都按特定顺序排列,因此我通过父模型向Course和Note添加了sequence
属性。这允许他们保存链接实例的pk的有序列表(例如[1,4,6,2,3]),然后我可以编辑它的顺序。
我还为Course添加了global_sequence
,其中包含('class_name',pk)元组的列表作为字符串E.g. [“('注意',1)”,“('任务',19)”,“('任务',31)”,“('注意',2)”,“('任务',22)” ,]。
class Sequence(models.Model):
sequence = django.contrib.postgres.fields.ArrayField(models.IntegerField())
class Course(Sequence):
title = models.CharField(max_len=80)
global_sequence = django.contrib.postgres.fields.ArrayField(
models.CharField(max_len=30)
)
class Note(Sequence):
body = models.TextField()
course = models.ForeignKey(Course, related_name='content')
class Task(models.Model):
q = models.CharField(max_len=100)
a = models.CharField(max_len=100)
note = models.ForeignKey(Note, related_name='content')
我觉得构建sequence
和global_sequence
的方法可能很幼稚,因为无论何时创建或删除链接实例(我都使用信号),都必须手动更新序列。此外,global_sequence
中的字符串可能容易出错,我必须使用eval()来取回它们,但ArrayList不能存储元组。我考虑过使用ContentType
模型,但我不知道如何在有序列表中使用它。
我的问题是:是否存在更少出错或更安全(即非eval())的方式来保持特定顺序的相同或混合模型的链接实例?
我发现最接近的是this,它只是说整数的有序列表并不可怕如果它没有经常更新,但我的序列可能会相当频繁地更新