【问题标题】:How to pass currently user ID/PK from view to form in Django?如何在 Django 中将当前用户 ID/PK 从视图传递到表单?
【发布时间】:2021-02-26 19:16:58
【问题描述】:

我遇到的问题是我正在尝试创建一个表单,该表单通过将当前登录的用户 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。它给了我一个错误: /add 处的 KeyError '用户ID'

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)
    ...

【问题讨论】:

  • 如果您可以自己解决问题,请将您的答案作为答案发布,而不是作为对问题的编辑。完全没问题,回答自己的问题! ;)

标签: django forms view django-views django-forms


【解决方案1】:

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

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('/')

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 2022-01-15
    • 2023-04-09
    • 1970-01-01
    • 2019-01-21
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多