これらの 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 を使用しています)