我有一个与用户(user_id)相对应的OneToOne字段,在我的头像上传表单中,我得到一个所有用户的下拉列表以选择一个,但我希望django用当前登录的用户填充它。此外,在提交表单时,对于某些用户,我收到此消息“此用户的配置文件已存在。”
对于第一个问题,我认为内联表单集是解决方案,但我不知道如何将this应用于我的表单。我对第二个问题一无所知。每次创建新用户时,我都会使用信号创建配置文件,我不知道如何更新它。我是django的新手。
以下是我的模型的代码:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar_img = models.ImageField(upload_to='avatars', blank=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
表格:
from django import forms
from profiles.models import Profile
class AvatarForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('user', 'avatar_img', )
观点:
from django.shortcuts import render, redirect
from profiles.forms import AvatarForm
def model_form_upload(request):
if request.method == 'POST':
form = AvatarForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('index')
else:
form = AvatarForm()
return render(request, 'profiles/avatar_form.html', {
'form': form
})
感谢。
使用解决方案更新...我将其添加到表单中:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['user'].widget.attrs['disabled'] = 'true'
self.fields['user'].widget = HiddenInput()
答案 0 :(得分:0)
您可以使用表单的初始参数。在视图中创建表单对象时,可以为表单提供初始参数。
在您看来。
此
form = AvatarForm()
可以替换为
form = AvatarForm(initial={'user': request.user})
This参考应该对您有所帮助。