【问题标题】:How to put a hidden fields in a formset and instantiate this value?如何将隐藏字段放入表单集中并实例化该值?
【发布时间】:2016-02-12 11:13:33
【问题描述】:

我希望我可以从我的表单集中删除用户,它会实例化用户登录的值“logged_user”... 如何实例化字段的值?

我有这个views.py:

def access(request, instance):
    replies = Reply.objects.all()
    pages = Page.objects.all()
    numPages = Page.objects.get(pk=instance)
    questions = Question.objects.filter(page=instance)
    length_questions = len(questions)
    logged_user = get_logged_user_from_request(request)
    ReplyFormSet = modelformset_factory(model=Reply, fields=('question', 'answer', 'user'), extra=length_questions, can_delete=True)
    if request.method == 'POST':  
        formset = ReplyFormSet(request.POST, queryset=Reply.objects.none())
        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect('/baseVisite/')
        else:
            messages.add_message(request, messages.INFO, 'Le formulaire est incorrecte !')
            return render_to_response('polls/error.html', context_instance=RequestContext(request))
    else:
        formset = ReplyFormSet(queryset=Reply.objects.none())
    return render_to_response('polls/access.html', {
     'formset': formset,
     'questions':questions,
     'logged_user':logged_user,
     'numPages' : numPages
     })

这个forms.py:

class ReplyForm(forms.ModelForm):
    class Meta:
        model = Reply
        fields = ('question','answer','user')

我的模板:

<form method="POST" action="">
    {{ formset.management_form }} {% csrf_token %}
    <table>
      <br>{{ formset.as_table }}<br>

    </table><br>
    <center><input type="submit" value="Submit" class="btn btn-success" />
</form>

编辑:

def get_logged_user_from_request(request):
    if 'logged_user_id' in request.session:
        logged_user_id = request.session['logged_user_id']
        # On cherche un étudiant ici
        if len(Etudiant.objects.filter(id=logged_user_id)) == 1:
            return Etudiant.objects.get(id=logged_user_id)
        # On cherche un Employe ici
        elif len(Employe.objects.filter(id=logged_user_id)) == 1:
            return Employe.objects.get(id=logged_user_id)
        # Si on trouve rien -->
        else:
            return None
    else:
        return None

我发现自己有多种形式,我可以在其中选择用户 我希望用户定义与此人连接的对象“logged_user”

【问题讨论】:

  • 请注意,您已经定义了一个模型表单ReplyForm,但您没有在表单集中使用它。如果需要ReplyFormSet = modelformset_factory(model=Reply, form=ReplyForm, extra=length_questions, can_delete=True),可以将其传递给modelformset_factory。但是,在这种情况下可能不需要模型表单,因为您要更改的只是fields

标签: python django django-forms formset formsets


【解决方案1】:

从字段列表中排除用户,

ReplyFormSet = modelformset_factory(model=Reply, fields=('question', 'answer'), extra=length_questions, can_delete=True)

然后在保存表单集时设置它。

if request.method == 'POST':  
    formset = ReplyFormSet(request.POST, queryset=Reply.objects.none())
    if formset.is_valid():
        new_instances = formset.save(commit=False)
        for new_instance in new_instances:
            new_instance.user = logged_user
            new_instance.save()

【讨论】:

  • request.user 指的是什么?
  • 在 Django 中,request.user 是登录用户。也许你想要logged_user 在你的情况下。我不确定get_logged_user_from_request 做了什么。您也许可以删除该方法并使用request.user
  • 我可以分享 def get_looged_user_from 请求
  • 我的代码有这个错误:'ReplyForm' object has no attribute 'cleaned_data'
  • 代码丢失if formset.is_valid():,我现在添加了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多