python - 如何将模型实例连接到 django 中的用户?
问题描述
我希望这样做,以便创建个人资料的登录用户在创建个人资料时链接到他们的 guestprofile 模型。
当我在登录时创建客人个人资料时,它成功创建了客人个人资料,但在客人个人资料管理屏幕中,没有用户连接到已创建的客人个人资料模型。 相反,有一个列出所有用户的下拉菜单,这使得连接过程手动。谢谢。
表格.py
class AddProfileForm(forms.ModelForm):
name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'class': 'form-control'}))
location = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'form-control'}))
summary = forms.CharField(max_length=500, widget=forms.Textarea(attrs={'class': 'form-control'}))
profile_pic = forms.ImageField()
class Meta:
model = GuestProfile
fields = ('name', 'location', 'summary', 'profile_pic')
模型.py
class GuestProfile(models.Model):
user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
location = models.CharField(max_length=100)
summary = models.TextField(max_length=350)
profile_pic = models.ImageField(null=True, blank=True, upload_to="images/")
def __str__(self):
return str(self.user)
视图.py
class AddProfileView(CreateView):
model = GuestProfile
form_class = AddProfileForm
template_name = 'profilemanip/addprofile.html'
success_url = reverse_lazy('home')
def get_object(self):
return self.request.user
编辑:我最终通过将我的 AddProfileView 更改为以下内容来解决我的问题:
def AddProfileView(request,*args,**kwargs):
form = AddProfileForm(request.POST or None)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
form = AddProfileForm()
return render(request, "profilemanip/addprofile.html", {"form": form})
解决方案
尝试将此添加到您的 AddProfileForm 以将用户与配置文件相关联:
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user',None)
super(AddProfileForm, self).__init__(*args, **kwargs)
推荐阅读
- excel - 从“删除工作表”选项灰显的工作簿中删除工作表
- javascript - While 语句在 JS 中是如何工作的?
- nix - 选择器“nix-repl”不匹配派生
- sql - 使用 oracle 的 SQL 查询到 Unpivot 依赖列
- c# - 编辑 .csproj 文件后 XAML 自动代码生成不起作用
- python - 根据条件插入 SQL Server
- c - Linux 守护进程似乎挂在“recvfrom”,发现进程 procfs 网络损坏且无法访问
- c# - C#如何将复杂类型的xml序列化为xml属性?
- c# - C# 深度连接查询
- lua - 使用 lua 编辑文件中的特定行