不变的Django模型

时间:2018-08-02 10:49:25

标签: django django-models immutability

无论何时进行任何模型更改,我都想保存一个新对象,而不是更新当前版本。

例如,让我们以一个基本场景为例,我有两个模型

class Question(models.Model):
    version = models.PositiveIntegerField(blank=False)
    title = models.CharField(max_length=250, blank=False)
    answers = models.ManyToManyField('Answer')

    def __str__(self):
        return self.title


class Answer(models.Model):
    version = models.PositiveIntegerField(blank=False)
    text = models.CharField(max_length=100)

    def __str__(self):
        return self.text

我创建了一个新的Question对象。 让我们称它为Q1(pk = 1),它具有3个答案,分别为A1(pk = 1),A2(pk = 2)和A3(pk = 3)。

现在将新答案A4(pk = 4)添加到Q1(pk = 1)时。它创建一个新版本的Q1(pk = 2)并附加A4(pk = 4)。

这样我仍然可以访问Q1的早期版本。

1 个答案:

答案 0 :(得分:-2)

您是否认为可以在视图中保存对象

然后将您的models.py更改为:

class Question(models.Model):
    title = models.CharField(max_length=250, blank=False)
    text_question = models.TextField(max_length=500)

    def __str__(self):
        return self.title


class Answer(models.Model):
    related_question = models.ForeignKey(Question, on_delete=models.CASCADE)
    text_comment = models.CharField(max_length=100)

    def __str__(self):
        return self.text_comment

以下是您的views.py外观如何的示例

def create_post_homework(request):
    your_form = Yo(request.POST or None)
    if request.method == "POST":
        if create_post.is_valid():
            create_post.save() # you save it
            return redirect('/') # it redirects you to another page
args = {'create_post': create_post}
return render(request, 'ask/create_a_question.html', args)