Django의 필드를 자동 인구하는 방법은 무엇입니까?
-
03-07-2019 - |
문제
필드가있는 모델 질문이 있습니다 userID, 질문을하기 전에 로그인해야합니다. 저장할 때 현재 로그인 한 사용자의 사용자 ID를 캡처하고 질문 모델의 userID에 할당하려고합니다.
내 양식에 userID를 표시하지 않음 IE가 다음과 같이 userID를 선언 한 질문 모델에서 다음과 같습니다.
클래스 질문 (models.model) : ... userId = models.foreignkey (user, editable = false) ...
로그인 된 사용자 ID를 질문 모델에 할당하는 방법 userID?
해결책
코드는 다음과 같습니다.
from django.contrib.auth.decorators import login_required
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
@login_required
def ask(request):
form = QuestionForm(request.POST)
if form.is_valid():
question = form.save(False)
question.userid = request.user
question.save()
#...
다른 팁
이 블로그 진입 (James Bennett)은 당신에게도 유용 할 수 있습니다 ... 거의 정확히 필요한 일을 할 수있는 방법을 제시합니다.
더 최근의 자료와 업데이트 될 가능성은 공식 Django 문서를 추천합니다. 이 예는 관리 문서의 ModelAdmin Methods 섹션으로 향했습니다.https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods
당신이 나와 같다면, 당신은 그 예제를 잡고 달리기를 유혹받을 것입니다. 그러나 당신은 속도를 늦추고, 몇 분 동안 읽고, 구현하는 데 도움이 될 것입니다 - 나는 확실히 ...
나는 1.6을 가리키했지만 페이지의 오른쪽 하단 모서리에는 동적 선택기가 있습니다. (이 멋진 문서는 나를 레일에서 장고로 밀어 붙이는 것입니다!)
명심해야 할 한 가지는 Django의 디자인 제약을 해킹하지 않고 모델의 요청 객체 (및 현재 사용자)에 액세스 할 수 없다는 사실입니다.
따라서 create_by 및 updated_by와 같은 자동으로 채워진 필드와 같은 깔끔한 트릭은 django에서 작동하지 않습니다. @daevaorn이 묘사 한대로 뷰에서 이러한 필드를 수동으로 설정해야합니다.