Django 填充选择字段
我正在使用四个表:
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_type
的表单元素(这意味着 queryset
__init__
不起作用),所以我需要填充 ChoiceField
的 choices=
变量。我只是想知道如何做到这一点,因为我只想要活动
并链接到与文件
相同的产品
的警报, FileAlarm
已链接。
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'})) # << ?!?
I am working with four tables:
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)
Unfortunatly I need to pass an onChange
event to the form element of FileAlarm.alarm_type
(which means the queryset
in __init__
wont work) so I need to populate the choices=
variable of ChoiceField
. I'm just wondering how to do that since I only want alarms that are active
and linked to the same product
s as the File
which the FileAlarm
is linked.
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'})) # << ?!?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
事实证明最好的解决办法是:
It turns out the best way round it was: