的型號:如何呈現有條件
class Human(models.Model):
UNIQUE = models.CharField(max_length=10)
name = models.CharField(max_length=30)
father = models.ForeignKey('Human', related_name = "fathers_children", null=True, blank=True)
mother = models.ForeignKey('Human', related_name = "mothers_children", null=True, blank=True)
def __unicode__(self):
return "%s" % name
class Person(Human):
email = models.EmailField()
而現在,我試圖讓的ModelForm:
class PersonForm(ModelForm):
class Meta:
model = Person
fields = ('UNIQUE','name','email')
截止本 - 完美的作品。
,現在我想補充兩個字段:父親和母親
如果個人已經擁有的父親(和/或母親) - 只顯示名稱。如果不是 - 顯示輸入字段(或兩個字段),用戶必須輸入UNIQUE。
修訂
class PersonForm(ModelForm):
class Meta:
model = Person
fields = ('UNIQUE','name','email')
widgets = {
'father' :forms.TextInput(),
'mother' :forms.TextInput(),
}
該解決方案改變了選擇進入的TextInput,這是非常好的一步。但是現在我看到父親/母親的身份不是姓名(在Select中可以看到)。
=====================什麼期望====================== ============ 一小片顯卡:
案例1:人沒有父母
UNIQUE: [AAA]
name: [John Smith ]
email: [[email protected]]
father: [ ]
mother: [ ]
案例2:人有爸爸
UNIQUE: [BBB]
name: [Kate Late ]
email: [ ]
father: Mike Tyson
mother: [ ]
案例3:人員都有父母
UNIQUE: [CCC ]
name: [Jude Amazing ]
email: [[email protected] ]
father: James Bond
mother: Alice Spring
案例4:在人[AAA](情況1)用戶類型的母親:[BBB]
UNIQUE: [AAA ]
name: [John Smith ]
email: [[email protected]]
father: [ ]
mother: Kate Late
(我希望你能看到[凱特晚]和凱特晚之間的差異(不[ ])
澄清:您希望實例中已存在的字段不再可編輯? – 2014-09-20 07:39:12
不完全。這很容易做到self.fields ['name']。widget.attrs ['readonly'] = True或self.fields ['name']。widget.attrs ['disable'] = True。我需要將ChoiceField轉換爲TextField,但是TextField包含的id不是選項的值 – 2014-09-20 08:38:27
您的意思是'Option'的值是什麼?我不確定我是否可以理解這個問題,但是如果您在模型上實現了__str__(或__unicode__)方法,這將非常有用。之後看看TextField中出現的內容。正如我所說,我不確定你以後的真實情況,這只是一個猜測。 – cezar 2014-09-20 08:51:45