0

これらの 2 つのクラスがあり、次のように作成された各犬のレコードに首輪のレコードを作成して添付するとします。

class Collar(models.Model):
    serial_number =  models.IntegerField(primary_key=True, db_column='serial_number')
    weight = models.CharField(max_length=10)
    class Meta:
        db_table = u'existing_table_from_before_django_was_born'

class Dog(models.Model):
    size = models.CharField(max_length=10)
    collar = models.OneToOneField(Collar,blank=True, null=True, editable=False)

    def save(self, *args, **kwargs):
        if not self.id:
            self.collar = Collar()
        if self.collar:
            self.collar.weight = '10'
            self.collar.save()
        super(Dog,self).save(*args, **kwargs)

このコードを実行すると、新しい Collar レコードが作成されますが、Dog.collar_id がテーブルに null として表示されるという問題があります。

お気づきのとおり、ここでひねりを加えたのは、Collar クラスが既存のテーブルを参照していることです。MySQLで主キーを自動インクリメントにしましたが、何か問題が発生している可能性があります。

save メソッドを実行すると、Collar オブジェクトが作成され、値が更新されますが、self.collar.serial_number は「none」を出力します。

何が起こっているのでしょうか?私は永遠に感謝します。(私は 1.2.5 を使用しています)

4

2 に答える 2

2

Django が保存時に自動的に値を取得することを認識できるように、Collar.serial_numberフィールドを にする必要があります。AutoField

于 2012-08-31T20:04:51.713 に答える
1

保存するまで PKはありませCollarん。つまり、その時点での割り当ては機能しません。

collar = Collar()
 ...
collar.save()
self.collar = collar
于 2012-08-31T19:04:56.947 に答える