【问题标题】:Is there a better solution instead of ModelMultipleChoiceField?有没有比 ModelMultipleChoiceField 更好的解决方案?
【发布时间】:2021-08-24 17:57:11
【问题描述】:

我有一个表单,用户可以在其中创建钓鱼之旅,他们可以从注册用户(渔民)中添加多个参与者。

models.py

class Fisherman(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    fisherman_id = models.AutoField(primary_key=True)

    class Meta:
        verbose_name = "Fisherman"
        verbose_name_plural = "Fishermen"

    def __str__(self):
        return f'{self.user.username}'

class Trips(models.Model):
    lake = models.CharField("Lake", max_length=150)
    city = models.CharField("City", max_length=100, blank=True)
    s_date = models.DateTimeField("Starting Date", auto_now=False, auto_now_add=False)
    e_date = models.DateTimeField("Ending Date", auto_now=False, auto_now_add=False)
    fisherman = models.ManyToManyField(Fisherman)
    trip_id = models.AutoField(primary_key=True)
    total_catch_weight = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    
    class Meta:
        verbose_name = "Trip"
        verbose_name_plural = "Trips"

    def __str__(self):
        return f"{self.lake} - {self.trip_id}"

forms.py

class TripsForm(forms.ModelForm):
    fisherman = forms.ModelMultipleChoiceField(queryset=Fisherman.objects.all().exclude(user__username="admin"), widget=forms.SelectMultiple(attrs={'class': 'form-select'}))
    class Meta:
        model = Trips
        fields = ["lake", "city", "s_date", "e_date", "fisherman"]
        widgets = {
            "lake": forms.TextInput(attrs={'type': 'text', 'class': 'form-control', 'id': 'LakeInput',}),
            "city": forms.TextInput(attrs={'type': 'text', 'class': 'form-control', 'id': 'CityInput',}),
            "s_date": forms.DateTimeInput(format='%Y-%m-%d %H:%M', attrs={'class':'datetimefield form-control', 'id': 'StartingDate',}),
            "e_date": forms.DateTimeInput(format='%Y-%m-%d %H:%M', attrs={'class':'datetimefield form-control', 'id': 'EndingDate',}),
        }

我目前正在使用 ModelMultipleChoiceField 列出表单中的所有现有渔民,但我想找到更好的解决方案,因为我不希望用户看到所有注册的渔民。

有没有办法通过输入他们的名字来增加更多的渔民?在多多场的情况下有可能吗? 我不知道“打字解决方案”如何工作,因为只有注册的渔民才能添加到旅行中。

【问题讨论】:

    标签: django django-models django-forms django-orm manytomanyfield


    【解决方案1】:

    在这种有很多选择的情况下,我喜欢使用django_select2ModelSelect2MultipleWidget

    它动态加载选项并具有搜索功能。更多信息:https://django-select2.readthedocs.io/en/latest/index.html

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多