2016-02-12 29 views
0

我希望我可以從我的formset中刪除用戶,並實例化值爲「logged_user」,這是用戶登錄... 如何才能實例化字段的值?如何將一個隱藏的字段放入一個formset並實例化這個值?

我有這個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」

+0

請注意,您已經定義了模型的形式'ReplyForm',但你是不是在你的表單集使用它。如果你想'ReplyFormSet = modelformset_factory(model = Reply,form = ReplyForm,extra = length_questions,can_delete = True)',你可以將它傳遞給'modelformset_factory'。然而,在這種情況下,模型形式可能不是必需的,因爲你正在改變的是'fields'。 – Alasdair

回答

1

排除在字段列表中的用戶,

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

然後在保存formset時進行設置。

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() 
+0

request.user是指什麼? –

+0

在Django中,'request.user'是登錄用戶。也許你想''logged_user'在你的情況。我不確定什麼'get_logged_user_from_request'。您可能可以刪除該方法並使用'request.user'。 – Alasdair

+0

我可以共享def get_looged_user_from請求 –

相關問題