2017-12-30 14 views
0

테이블에 2 개의 필드가 있습니다. trackword and created_byModelForms를 사용하는 경우 필드를 수정하는 방법을 모릅니다.

필드 "created_by"를 forms.py에 포함 시키면 선택 목록이 생기고 작성자를 선택할 수 있지만 괜찮습니다.하지만 수동으로해야하는 것은 불필요합니다. 한 쪽에서는 로그인 한 사람이기 때문에 선택 목록을 사용하여 누가 트랙 워드를 추가했는지 말할 수 있습니다. 둘째, 다른 사용자가 선택 목록에있는 다른 기존 사용자를 볼 수있는 문제를 만듭니다. 다른 사람들이 볼 수 없도록해야합니다.

그래서, 내 양식 코드는 다음과 같습니다 경우 :

@login_required 
def add_trackword(request): 
    form = masterform(request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 
      messages.add_message(request, messages.SUCCESS, "The post has been saved!") 
      return HttpResponseRedirect("/trackwords/list/") 

    return render(request, 'masterform.html', {'form': form}) 

FORM

<div class="row" > 
    <div class="panel panel-default col-md-4"> 
     <div class="panel-body"> 
      <form action="" method="post">{% csrf_token %} 
       {{ form.as_p }} 
      <input type="submit" class="btn btn-block btn-success" value="Submit"> 
     </form> 
     </div> 
    </div> 
</div> 

보시다시피, 양식이 자동으로 장고 모델의 형태로 엔진에 의해 생성 내가 해달라고하면서해야한다 모든 필드를 써주세요. 또는 나는 어떻게하는지 모른다. 나는 이것을 추가하고 싶다. 'request.user'는 코드 스 니펫의 어딘가에 있습니다. 테이블이 행 셀에서 created_by를 가져 오지 않으면 null이 아닌 빈 셀 제약 조건을 발생시킬 것이기 때문입니다.

사실, 이러한 모든 추상화로 인해 편집이 매우 어려워집니다. 내가 손으로 양식을 쓰는 경우 장고가 나를 위해 모든 것을 만들도록하면 클라이언트 검사를 추가 할 수 있습니다.

답변

0

나는 직접 대답을 찾았습니다 ... : & 물론 이것은 아무도 그것을 알지 못했음을 의미하지는 않습니다. 실제로 나는 그것을 모르는 사람이었을 것입니다. 따라서 여기에 있습니다 :

실제로 폼을 만들 때 수행 할 수있는 일은 없으며, 엔진이 그 일을 할 수 있도록하지만, 사용자가 조정할 수있는 views.py에 양식을 저장하게하면됩니다.

폼을 미리 저장하는 대신 커밋을 false로 설정하십시오. 제 경우에는 원하는 줄을 추가하십시오. post.created_by = request.user

그런 다음 저장하십시오.

나는 천재가 아닐까요?