Python Django填充选择字段

Python Django填充选择字段,python,django,django-forms,Python,Django,Django Forms,我正在使用四张桌子: class Product(models.Model): active = models.BooleanField(default=True) name = models.CharField(max_length=40, unique=True) acronym = models.CharField(max_length=3, unique=True) class Alarm(models.Model): active = models.B

我正在使用四张桌子:

class Product(models.Model):
    active = models.BooleanField(default=True)
    name = models.CharField(max_length=40, unique=True)
    acronym = models.CharField(max_length=3, unique=True)

class Alarm(models.Model):
    active = models.BooleanField(default=True)
    product = models.ForeignKey(Product) #NEW
    name = models.CharField(unique=True, max_length=35)
    image_file = models.CharField(max_length=30)

class File(models.Model):
    reference = models.CharField(max_length=40)
    product = models.ForeignKey(Product, related_name='item_product') #NEW
    created = models.DateTimeField(default=datetime.now)
    created_by = models.ForeignKey(User)

class FileAlarm(models.Model):
    file = models.ForeignKey(File)
    created = models.DateTimeField()
    created_by = models.ForeignKey(User, related_name="alarm_created_by")
    alarm_date = models.DateField(default=datetime.now)
    alarm_type = models.ForeignKey(Alarm)
    alarm_comment = models.CharField(max_length=80, blank=True, null=True)
不幸的是,我需要将一个
onChange
事件传递给
FileAlarm.alarm\u type
(这意味着
\u init\u\u
中的
queryset
不起作用)的表单元素,因此我需要填充
ChoiceField
选项=
变量。我只是想知道怎么做,因为我只想要
活动的
,并且链接到与
文件
链接的
产品相同的
报警

class FileAlarmForm(ModelForm):

    def __init__(self,file,*args,**kwargs):
        super(FileAlarmForm, self).__init__(*args, **kwargs)
        self.fields['alarm'].queryset = Alarm.objects.filter(product__id=file.product_id)

    alarm_type = ChoiceField(required=True, widget=Select(attrs={'onChange':'updateAlarmImage'}))  # << ?!?
类文件AlarmForm(ModelForm):
定义初始化(self,file,*args,**kwargs):
super(FileAlarmForm,self)。\uuuuuu初始化(*args,**kwargs)
self.fields['alarm'].queryset=alarm.objects.filter(product\u id=file.product\u id)

alarm_type=ChoiceField(required=True,widget=Select(attrs={'onChange':'updateAlarmImage'}))#事实证明,最好的解决方法是:

class FileAlarmForm(ModelForm):

    def __init__(self,file,*args,**kwargs):
        super(FileAlarmForm, self).__init__(*args, **kwargs)
        p = Product.objects.get(id=file.product_id)
        self.fields['alarm_type'].widget = Select(attrs={'onchange':'updateAlarmImage'})
        self.fields['alarm_type'].queryset = Alarm.objects.filter(product=p)
在这里,问题似乎几乎是一样的,或者至少接近你所需要的。试着看看它是否适合你。