我的目标是创建一个表单来添加包括用户在内的设备的租金。
device和user是用ForeignKey实现的,对于user,我想使用django-select2,因为用户很多。
models.py
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.deviceforms.py
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)?
发布于 2019-09-10 20:31:04
我不得不切换到ModelChoiceField并设置一个查询集。
class RentalForm(forms.ModelForm):
user = forms.ModelChoiceField(
queryset=ldap_data.objects.all(),
widget=ModelSelect2Widget(
model=ldap_data,
search_fields=['username__icontains']
)
)
...https://stackoverflow.com/questions/57859212
复制相似问题