2011-09-11 71 views
0

這裏是我想設立了幾個模型,工作代碼:Django的:許多對1的關係

from django.db import models 

class A(models.Model): 
    x = models.CharField(max_length = 2) 

class B(models.Model): 
    a = models.ForeignKey(A) 
    y = models.CharField(max_length = 2, default = a.x) 

然而,當我運行python manage.py syncdb,它告訴我,該ForeignKey的對象a沒有屬性x。我已經通過Django文檔搜索,迄今一直無法找到我的答案。希望代碼的含義很明確。我如何真正去實現這個?

在此先感謝!

+0

作爲一個完全無關的問題,stackoverflow如何自動爲代碼着色? –

+1

http://code.google.com/p/google-code-prettify/ – Vamsi

回答

3

你不能把變量字段的默認屬性 - 它必須可以是常量或調用。

如果你真的需要做到這一點,我想一個辦法是做在__init__

class B(models.Model): 
    def __init__(self, *args, **kwargs): 
     super(B, self).__init__(*args, **kwargs) 
     if self.a and not self.b: 
      self.b == self.a.x 

,但我必須說,我不明白你爲什麼會想,當你」只是複製一個已經可以通過a.x直接訪問的值。

+0

在我的特殊情況下,'A'代表一個用戶,'B'代表一個帖子。 'x'是用戶可以選擇填寫的字段,但我不想要求他們填寫。但是,如果他們想發佈帖子,我要求他們爲特定帖子填寫此字段,在這種情況下,*如果*他們已經爲其用戶配置文件填寫此字段,我希望它成爲默認字段價值的選擇。 鑑於此,從設計的角度來看,您認爲使用您提供的代碼是一個好主意嗎? –

+1

這可能是一個單獨的問題,但我會說你的解釋是有意義的,charfield/foreign關鍵字是正確的結構; *然而,*默認不屬於模型,但在您用來創建帖子的表單中。 –

0

要定義一個多到一的關係,你必須使用django.db.models.ForeignKey.

a= models.ForeignKey(A) 
+0

對不起。那實際上是我的一個錯字。我馬上編輯這篇文章。 –