Python 如何基于模型a的字段公开模型b的某些特定字段?

Python 如何基于模型a的字段公开模型b的某些特定字段?,python,django,Python,Django,我想创建一个ModelForm,如果设备的device\u type等于DC,它将显示控制指令的一些特定字段。否则显示所有字段 假设 if device type == 'DC': show these filed in form-> on_off_flag, speed_flag, direction_flag else: show all 我该怎么做 类设备(models.Model): 设备类型=( (“交流”、“交流电机”), (“直流”、“直流电机”), ) use

我想创建一个
ModelForm
,如果设备的
device\u type
等于
DC
,它将显示
控制指令的一些特定字段。否则显示所有字段

假设

if device type == 'DC':
   show these filed in form-> on_off_flag, speed_flag, direction_flag
else:
   show all
我该怎么做

类设备(models.Model):
设备类型=(
(“交流”、“交流电机”),
(“直流”、“直流电机”),
)
user=models.ForeignKey(用户,on_delete=models.CASCADE)
device_id=models.CharField(最大长度=64,unique=True,blank=False)
设备名称=models.CharField(最大长度=100,空白=False)
设备型号=models.CharField(最大长度=10)
设备类型=型号.CharField(最大长度=2,选项=设备类型,空白=假)
位置=型号.CharField(最大长度=150)
定义(自我):
返回self.device\u名称
课堂控制说明(models.Model):
方向选择=(
(‘FW’、‘Forward’),
('BW','Backward'),
)
#OneToOneField类似于具有unique=True的ForeignKey,但“反向”
#关系的一侧将直接返回单个对象。
device=models.OneToOneField(设备,on_delete=models.CASCADE,主键=True)
on_off_flag=models.BooleanField(默认值=False)
电压标志=型号。浮动字段(最大长度=20,默认值=0)
当前_标志=models.FloatField(最大_长度=20,默认值=0)
speed_flag=models.IntegerField(默认值=0,验证器=[MinValueValidator(0),MaxValueValidator(100)])
direction\u flag=models.CharField(最大长度=2,选项=direction\u选项,默认值=FW')
frequency\u flag=models.IntegerField(默认值=0)

我建议创建两个表单,一个仅包含DC设备的字段,另一个表单包含所有字段。然后在您的视图中,根据设备类型选择要使用的表单

class DeviceForm(forms.ModelForm):
     class Meta:
         model = Device
         fields = "__all__"

     def __init__(self,*args,**kwargs):
         super().__init__(*args, **kwargs)
         if self.instance.pk:
              if self.instance.device_type != "DC":
                   del self.fields["on_off_flag"]
                   del self.fields["speed_flag"]
                   del self.fields["direction_flag"]
但我不推荐,因为你会发现这种方法非常有限