首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-select2 2选择pk (IntegerField)而不是用户名(CharField)

Django-select2 2选择pk (IntegerField)而不是用户名(CharField)
EN

Stack Overflow用户
提问于 2019-09-09 18:13:26
回答 1查看 220关注 0票数 0

我的目标是创建一个表单来添加包括用户在内的设备的租金。

deviceuser是用ForeignKey实现的,对于user,我想使用django-select2,因为用户很多。

models.py

代码语言:javascript
复制
class Device(models.Model):
    name = models.CharField(
        verbose_name = "Gerätename",
        max_length =       128,
        unique =        True,
        )

    def __str__(self):
        return self.name



class ldap_data(models.Model):
    username = models.CharField(max_length=1024, unique=True)

    class Meta:
        ordering = ('username',)

    def __str__(self):
        return self.username


class Rental(models.Model):
    user = models.ForeignKey(ldap_data, on_delete=models.CASCADE)
    device = models.ForeignKey(Device, on_delete=models.CASCADE)
    date_start = models.DateField()
    date_end = models.DateField()


    class Meta:
        ordering = ('date_start',)

    def __str__(self):
        return self.device

forms.py

代码语言:javascript
复制
class RentalForm(forms.ModelForm):
    user = forms.ChoiceField(
            widget=ModelSelect2Widget(
                model=ldap_data,
                search_fields=['username__icontains']
            )
        )


    date_start = forms.CharField(label="Datum Ausleihe", help_text="", widget=forms.TextInput(attrs={'id': 'datepicker', 'class': 'form-control form-control-sm', 'placeholder': '01.01.2019' }))
    date_end = forms.CharField(label="Datum Rückgabe", help_text="", widget=forms.TextInput(attrs={'id': 'datepicker2', 'class': 'form-control form-control-sm', 'placeholder': '01.01.2019' }))

    class Meta:
        model = Rental
        fields = ['device', 'user', 'date_start', 'date_end',]

到目前为止,表单工作正常,但是如果我从django-select2字段user中选择一个用户并提交表单,它会抱怨:

Select a valid choice. 1 is not one of the available choices.

看起来表单试图验证所选用户的pk (=1),而不是username of ldap_data。我如何获得用户名(CharField)而不是pk (IntegerField)?

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 20:31:04

我不得不切换到ModelChoiceField并设置一个查询集。

代码语言:javascript
复制
class RentalForm(forms.ModelForm):
    user = forms.ModelChoiceField(
            queryset=ldap_data.objects.all(),
            widget=ModelSelect2Widget(
                model=ldap_data,
                search_fields=['username__icontains']
            )
        )
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57859212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档