0

したがって、次のモデルがあるとしましょう。

class Student(models.Model):
    am = models.SmallIntegerField(unique=True, primary_key=True) # XXX: max_value = 10000
    date_enrolled = models.DateField('Date Enrolled')
    semester = models.IntegerField(default=1)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    undergraduate = models.BooleanField(default=True)

次のような更新ビュー:

class StudentUpdateView(SqlPresenterMixin, StudentMixin, UpdateView):   
    model = Student
    form_class = StudentForm
    template_name = "profapp/student_form.html"
    slug_field = "am"

次に、このテストは失敗します。

class TestStudent(TestCase):
    def setUp(self):
        self.c = Client()
        Student.objects.create(am=2222, first_name="Chris",
                        last_name="Perivolas",
                        date_enrolled=datetime.date(year=2010, day=15,
                                                    month=2))
        Student.objects.create(am=7362, first_name="Mary",
                        last_name="Karagewrgena",
                        date_enrolled=datetime.date(year=2010, day=15,
                                                    month=2))

    def test_update(self):
        """
        """
        r = self.c.post("/profapp/students/2222/update/",
                        dict(am=7363, first_name="Chris",
                             last_name="Perivolas",
                             date_enrolled="3/15/2010",
                             semester=2,
                             undergraduate=1))
        self.assertEquals(Student.objects.filter(am=2222).exists(), False)

つまり、主キーを更新するときに更新ビューは古いエントリを削除しません。これを解決する最善の方法は何ですか?

4

1 に答える 1

2

Django のドキュメントによると、PK は決して変更されるべきではありません。PK は、オブジェクトを DB の特定の行に結び付けるものです。PK を変更すると、Django は DB 内の元の行への接続を失い、別の行を作成する必要があると想定します。

本当に必要な場合は、変更可能な ID として機能する別のフィールドを追加する必要があります。

于 2013-05-26T06:24:56.413 に答える