如何在Django中将当前用户ID/PK从视图传递到表单



我遇到的问题是,我试图创建一个表单,通过将当前登录的用户ID嵌入ModelForm中的隐藏字段来传递该表单。

型号.py

class UserPhotos(models.Model):
user = models.ForeignKey(NewUser, on_delete=models.CASCADE)
#photos = models.ImageField(height_field=1350, width_field=1080)
description = models.CharField(max_length=200)
date = models.DateTimeField(auto_now=True)
class Meta:
'''Change plural name'''
verbose_name_plural = 'Photos'

Forms.py

class AddPhotos(forms.ModelForm):
user = forms.CharField(widget = forms.HiddenInput(), required=False)
class Meta:
model = UserPhotos
fields = (
'description','user',
)

Views.py

def add_photo(request):
context = {}
user = request.user
if not user.is_authenticated:
return redirect('my_app:login',)
if request.POST:
form = AddPhotos(request.POST)
if form.is_valid():
form.save(commit=False)
form.user=request.user
form.save
return redirect('/')
else:
context['photoAdd_form'] = form
else:
form = AddPhotos()
context['photoAdd_form'] = form
return render(request, 'main/photo_add.html', context)

我尝试过这样的方法。它很有效,但我不知道如何将ID传递给init。它给了我一个错误:KeyError at/add"userID">

Forms.py

...
def __init__(self, *args, **kwargs):  #It is works but how will i pass the data
request = kwargs.pop('userId')
print(request)
super(AddPhotos, self).__init__(*args, **kwargs)
self.fields['user'].initial = request.user

Views.py

def add_photo(request):
context = {}
user = request.user
if not user.is_authenticated:
return redirect('my_app:login',)
if request.POST:
form = AddPhotos(request.POST, userId = request.user.id)
...

我发现了我犯的错误。现在一切正常。

if request.POST:
form = AddPhotos(request.POST)
if form.is_valid():
**obj = form.save(commit=False)**
user = NewUser.objects.filter(userNick=user.userNick).first()
obj.user = user
obj.save()
return redirect('/')

最新更新