Django ModelForm:搜索过滤器多对多字段小部件
Django ModelForm: search filter many to many field widget
我正在使用这个模型:
class Sample(models.Model):
id_sample = models.AutoField(primary_key=True)
name = models.CharField(unique=True, max_length=20)
sample_id_sex = models.ForeignKey(Sex, on_delete=models.CASCADE, db_column='id_sex', verbose_name='Sexe')
pools = models.ManyToManyField(Pool, through='SamplePoolIndexCand', through_fields=('sample_id', 'pool_id'), blank=True, verbose_name="Pools")
pools
是来自此模型的 m2m
字段:
class Pool(models.Model):
id_pool = models.AutoField(primary_key=True)
name = models.CharField(unique=True, max_length=50, verbose_name="Pool")
samples = models.ManyToManyField('Sample', through='SamplePoolIndexCand', blank=True, verbose_name="Mostres")
我创建了这个 ModelForm
:
class FormulariMostra(ModelForm):
class Meta:
model = Sample
fields = ("name", "sample_id_sex", "pools",)
它工作正常,但问题是 pools
字段可以包含数千个值。这里问了一个类似的问题:
我尝试了那里推荐的这个小部件 https://github.com/ExoticObjects/django-better-filter-widget 但它似乎过时了...
还有其他选择吗?我知道这可以在管理员中完成,但我想在 ModelForm
.
中完成
有 autocomplete_fields
个:https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.autocomplete_fields
所以你可以这样写:
class FormulariMostra(ModelForm):
class Meta:
model = Sample
autocomplete_fields = ["pools"]
fields = ("name", "sample_id_sex", "pools",)
或者还有raw_id_fields
https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields
我正在使用这个模型:
class Sample(models.Model):
id_sample = models.AutoField(primary_key=True)
name = models.CharField(unique=True, max_length=20)
sample_id_sex = models.ForeignKey(Sex, on_delete=models.CASCADE, db_column='id_sex', verbose_name='Sexe')
pools = models.ManyToManyField(Pool, through='SamplePoolIndexCand', through_fields=('sample_id', 'pool_id'), blank=True, verbose_name="Pools")
pools
是来自此模型的 m2m
字段:
class Pool(models.Model):
id_pool = models.AutoField(primary_key=True)
name = models.CharField(unique=True, max_length=50, verbose_name="Pool")
samples = models.ManyToManyField('Sample', through='SamplePoolIndexCand', blank=True, verbose_name="Mostres")
我创建了这个 ModelForm
:
class FormulariMostra(ModelForm):
class Meta:
model = Sample
fields = ("name", "sample_id_sex", "pools",)
它工作正常,但问题是 pools
字段可以包含数千个值。这里问了一个类似的问题:
我尝试了那里推荐的这个小部件 https://github.com/ExoticObjects/django-better-filter-widget 但它似乎过时了...
还有其他选择吗?我知道这可以在管理员中完成,但我想在 ModelForm
.
有 autocomplete_fields
个:https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.autocomplete_fields
所以你可以这样写:
class FormulariMostra(ModelForm):
class Meta:
model = Sample
autocomplete_fields = ["pools"]
fields = ("name", "sample_id_sex", "pools",)
或者还有raw_id_fields
https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields