加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在Django表单中将ForeignKey字段呈现为CharField

发布时间:2020-12-20 13:41:15 所属栏目:Python 来源:网络整理
导读:我的模特 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
我的模特

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',)

该模板将用户输入文本呈现为从用户模型加载的自动完成字段.

该页面正确显示用户输入文本字段,但是当我去编辑协作者时,用户输入文本字段显示用户ID,我想显示用户名.

解决方法

您想首先弄清楚您想要的确切行为.

假设我是id = 1,username =“Joel”的用户.当您制作CollaboratorForm并在表单上显示“Joel”(我的用户名)并将其编辑为“Jane”时,您是:

>尝试将我的名字编辑为“Jane”,以便id = 1现在有一个用户名= Jane?
>或尝试将关联用户更改为与该用户名匹配的用户?

一旦你知道,你可以继续.

我将user = forms.CharField(..)更改为username = forms.CharField(..);毕竟,那就是你真正表现出来的东西.

在您的视图中,当您创建表单时,请传递{‘username’的初始值:username-of-user-that-is-current-related}.

在您的视图中,当您处理表单时,在保存之前,使用cleaning_data [‘username’]来(a)更新该用户的用户名(如果上面的第一个案例)或(b)获取该表单的ID新用户并将其保存到.user字段(如果是上面的第二种情况).

当然,如果您想要的是真正处于更高级别的“让人们根据用户名选择用户”,您可以通过不使用CharField并使用相反,ChoiceField,您可以使用key = ID和value = name显示用户的下拉菜单.但是,根据您拥有的用户数量,可能无法很好地扩展.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读