Djang中通用外键的有序列表

2024-04-19 03:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个分层课程,笔记和任务模型的应用程序。也就是说,每个课程都有一堆Note实例通过ForeignKey指向它,每个Note都有一堆Task实例指向它。你知道吗

我希望所有内容按特定顺序排列,因此我通过父模型向Course和Note添加了sequence属性。这允许它们保存链接实例的pk的有序列表(例如[1,4,6,2,3]),然后我可以编辑其顺序。你知道吗

我还为Course添加了一个global_sequence,它将('class\u name',pk)元组列表保存为字符串,例如[“('Note',1)”,“('Task',19)”,“('Task',31)”,“('Note',2)”,“('Task',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')

我觉得我构建sequenceglobal_sequence的方法可能很幼稚,因为每当创建或删除链接实例时,序列都必须手动更新(我正在为此使用信号)。另外,global_sequence中的字符串可能容易出错,我必须使用eval()将它们取回,但是ArrayList不能存储元组。我考虑过使用ContentType模型,但我不知道如何在有序列表中使用它。你知道吗

我的问题是:是否有一种更不容易出错或更安全(即non-eval())的方法来按特定顺序保留相同或混合模型的链接实例?

我发现的最接近的东西是this,它简单地说整数的有序列表并不可怕,如果它不经常更新,那么我的序列可能会非常频繁地更新。你知道吗


Tags: 实例模型tasklen链接modelsglobalmax