我的模特
class Collaborator(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
我的表格:
class CollaboratorForm(forms.ModelForm):
user = forms.CharField(max_length=30, required=False)
class Meta:
model = Collaborator
fields = ('user',)
模板将用户输入文本呈现为从autocomplete
模型加载的User
字段。
该页面正确显示了用户输入文本字段,但是当我去编辑协作者时,用户输入文本字段显示用户ID 和我想显示用户名而不是。
答案 0 :(得分:1)
您想先了解您想要的确切行为。
让我们说我的用户ID = 1,用户名=" Joel"。当您制作CollaboratorForm并显示" Joel" (我的用户名)在表单上,你编辑它以阅读"简",你是:
一旦你知道,你可以继续。
我将user = forms.CharField(..)
更改为username = forms.CharField(..)
;毕竟,那是你真正表现出来的东西。
在您的视图中,在创建表单时,请将初始值传递给{'username':username-of-user-that-is-currently-related}
。
在您的视图中,当您处理表单时,在保存表单之前,请使用cleaned_data['username']
(a)更新该用户的用户名(如果上面的第一个案例)或(b)获取ID新用户并将其保存到.user
字段(如果是上面的第二种情况)。
当然,如果您想要的是真正处于更高级别的人,那么让人们根据用户名选择用户",您可能能够以不同的方式更轻松地解决这个问题 - 不使用完全是CharField,而是使用ChoiceField,因此您可以使用key = ID和value = name显示用户的下拉菜单。但是,根据您拥有的用户数量,可能无法很好地扩展。