【发布时间】:2019-02-06 19:53:11
【问题描述】:
嗯,我有两个 django 模型来存储问题和问卷。每个问题都包含在问卷中。每个问题都应该有一个字段来存储它将出现在调查问卷中的顺序。我的问题是处理问题顺序变化的最佳方式是什么。
模型的代码:
class Questionnaire(models.Model):
name = models.CharField(max_length = 100)
time_creation = models.DateTimeField(auto_now=True)
class Question(models.Model):
questionnaire = models.ForeignKey(Questionnaire, related_name='questions', on_delete=models.CASCADE)
text = models.TextField()
order = models.IntegerField()
我想到的一种方法是重写 Question 模型的 save 方法,如下所示:
def save(self, *args, **kwargs):
all_questions = self.questionnaire.questions.all()
if (self.order == None or self.order > len(all_questions)+1 or self.order == 0):
self.order = len(all_questions)+1 # starts in 1
else:
previous = all_questions.filter(order=self.order)
if len(previous)>0:
p = previous[0]
p.order = self.order+1
p.save()
super().save(*args, **kwargs)
这是一种递归函数,在 save() 内部,我验证是否有具有相同订单号的 Question 并增加它,然后调用 save(在 save 内部),这将对这个对象执行相同的操作。
这是解决问题的好方法吗? Django 有一些我可能不知道的特质,以后可能会咬我。我应该使用信号吗?有存档吗?感谢您的帮助!
【问题讨论】:
标签: django python-3.x django-models