![](/img/trans.png)
[英]django: if model has related models (ForeignKey) display Fields in main modelform
[英]Django ModelForm fields display based on whether related FK fields are used
我正在創建一個應用程序,用戶可以在其中設置對象和他們想要記錄的相應數據。 讓我給你舉個例子:
class vehicle_type(models.Model):
name = models.CharField(max_length=20, unique=True)
int1_name = models.CharField(max_length=20, blank=True, null=True)
int1_default = models.IntegerField(blank=True, null=True)
int2_name = models.CharField(max_length=20, blank=True, null=True)
int2_default = models.IntegerField(blank=True, null=True)
float1_name = models.CharField(max_length=20, blank=True, null=True)
float1_default = models.FloatField(blank=True, null=True)
class vehicle(models.Model):
registration = models.CharField(max_length=20)
vehicle_type = models.ForeignKey(vehicle_type)
int1_val = models.IntegerField(blank=True, null=True)
int2_val = models.IntegerField(blank=True, null=True)
float1_val = models.FloatField(blank=True, null=True)
描述車輛的數據將是這樣的:
# pseudo code
vehicle_type('Car','Seats',4,'Doors',4,'',)
vehicle_type('Van','Seats',2,'',,'Load',3.2)
然后車輛上的數據將是:
vehicle('ABC 123',1,2,2,) #sports car
vehicle('DEF 456',1,6,,) #SUV
vehicle('GHI 789',2,,,1.2) #light van
vehicle('JKL 246',2,4,3,3.6) #heavy van
我的問題是如何確保vehicleForm
不顯示vehicle_type
不需要的字段? 我知道我可以將vehicle_type
的實例傳遞給vehicleForm
模板,並且僅顯示在vehicle_type
中聲明的vehicleForm
的元素,但這似乎沒有必要並將邏輯移動到模板中。 (我希望這一切都有意義)
您可以將vehicle_type
傳遞給VehicleForm.__init__()
,並在其中放置一些自定義邏輯,例如,設置HiddenInput
不需要的字段小部件。
基本示例(代碼未經測試)::
class VehicleForm(forms.ModelForm):
def __init__(self, vehicle_type, *args, **kwargs):
if vehicle_type.name == 'Car':
self.fields[some_field_for_trucks].widget = forms.HiddenInput()
super(VehicleForm, self).__init__(*args, **kwargs)
當您在視圖中實例化VehicleForm
時,您只需將用戶選擇的vehicle_type
類型作為第一個參數傳遞。
查看動態 forms 的示例:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.