2012-08-31 74 views
0

比方說,我有這兩個類,我想創建和附加一個項圈記錄到被像這樣創建的每個狗紀錄:Django的模型 - 如何覆蓋保存方法,並創建另一個記錄

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在表中顯示爲空。

這裏的扭曲,你可以注意到的是,Collar類引用了現有的表。我使它的主鍵是在MySQL中自動遞增,但也許在那裏出了問題。

當我逐步完成保存方法時,我發現它創建了Collar對象並更新了值,但self.collar.serial_number打印出'none'。

任何想法可能發生什麼?我會永遠感激。 (我在1.2.5)

回答

2

你應該讓你的Collar.serial_number領域的AutoField,讓Django知道它保存自動獲取的值。

+0

這個技巧!我想知道是否值得用這個信息更新Django文檔? – Greg

1

你的Collar不是一個PK,直到你保存它,這意味着在那一點的分配將無法正常工作。

collar = Collar() 
... 
collar.save() 
self.collar = collar 
+0

這似乎仍然不起作用。但我認爲這是我所做的,我將用我遺漏的一個(也許是重要的)細節更新我的問題。 – Greg

+0

這不是一個「細節」,這是一個完全不同的問題。 –

相關問題