我正在建立一个网站,用户可以在其中上传文件并将上传内容附加到他们事先创建的项目中。上传是使用 django 表单完成的,用户可以在其中指定标题、评论等...还有一个下拉列表,用户可以在其中从他创建的现有项目中进行选择(项目列表取决于用户)作为现在下拉列表仅显示(自动生成的)项目 ID,它是模型项目的 pk。
我希望下拉菜单显示项目的名称,而不是项目 ID,这对用户来说不是很有意义。
我已经试过了
to_field_name='name'
但这没有用
我也试过
Project.objects.filter(user=user).values_list('name')
or
Project.objects.filter(user=user).values('name')
最后两个选项在 {'projectname} 中显示项目名称,但是当我选择它们并提交表单时出现错误“选择一个有效的选择。该选择不是可用的选择之一。”
这是我的代码:
模型.py
class Upload(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
upload_date = models.DateTimeField(default=timezone.now)
comments = models.CharField(max_length=10000, null=True)
title = models.CharField(max_length=10000, null=True)
project = models.CharField(max_length=99, default='--None--')
表格.py
class UploadForm(ModelForm):
project = ModelChoiceField(label='Select Project', queryset=Project.objects.all(), to_field_name='name',
empty_label='--Select Project--')
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(UploadForm, self).__init__(*args, **kwargs)
if user is not None:
self.fields['project'].queryset = Project.objects.filter(user=user)
class Meta:
model = Upload
fields = ['title', 'project', 'upload_date', 'comments']