0

假设我有这两个类,我想创建一个项圈记录并将其附加到每个创建的狗记录,如下所示:

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

您应该将您的Collar.serial_number字段设置为AutoField,以便 Django 知道它在保存时自动获取一个值。

于 2012-08-31T20:04:51.713 回答
1

保存之前,您Collar没有PK,这意味着此时分配将不起作用。

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