2009-12-08 5 views
0

에 사용자를 추가하는 동안 그룹을 지정, 내가 예를 들어 외국 키와 사용자 모델이 모델이 : 관리자 사이트에서내 응용 프로그램에서 장고 - 관리자

class Doctor(models.Model):  
username=models.ForeignKey(User, unique=True) 
... 

을, 새로운 의사를 추가 할 때, 나는 사용자 이름 필드 옆에 새 사용자를 추가 할 수있는 옵션이 있습니다. 이것은 내가 원했던 것이지만 열리는 대화 상자에서 새로운 사용자의 사용자 이름과 암호를 묻습니다. 이 새로운 사용자에게 그룹을 지정할 수 있기를 바랍니다. 이 일을하는 가장 좋은 방법은 무엇입니까?

감사합니다, 응용 프로그램에서

답변

2

lokharkey, 실제로 코드 다음, 관리자에게 자신의 모델을 등록 추가에 'admin.py'를 만들 수 있습니다.

from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.forms import UserCreationForm 

class MyUserCreationForm(UserCreationForm): 
    """ 
    A form that overrides the UserCreationForm 
    """ 
    class Meta: 
     model = User 
     fields = ("username", "groups") 

UserAdmin.add_form = MyUserCreationForm 

admin.site.register(Doctor) 

이제이 재정의 된 양식을 렌더링하는 템플릿을 재정 의하여해야합니다. 같은 디렉토리 구조,

"your_project_root_directory"/templates/admin/auth/user/add_form.html 

를 만들고 같은 콘텐츠를 복사,

{% extends "admin/change_form.html" %} 
{% load i18n %} 

{% block after_field_sets %} 

<p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p> 

<fieldset class="module aligned"> 

<div class="form-row"> 
    {{ form.username.errors }} 
    {# TODO: get required class on label_tag #} 
    <label for="id_username" class="required">{% trans 'Username' %}:</label> {{ form.username }} 
    <p class="help">{{ form.username.help_text }}</p> 
</div> 

<div class="form-row"> 
    {{ form.password1.errors }} 
    {# TODO: get required class on label_tag #} 
    <label for="id_password1" class="required">{% trans 'Password' %}:</label> {{ form.password1 }} 
</div> 

<div class="form-row"> 
    {{ form.password2.errors }} 
    {# TODO: get required class on label_tag #} 
    <label for="id_password2" class="required">{% trans 'Password (again)' %}:</label> {{ form.password2 }} 
    <p class="help">{% trans 'Enter the same password as above, for verification.' %}</p> 
</div> 

<div class="form-row"> 
    {{ form.groups.errors }} 
    {# TODO: get required class on label_tag #} 
    <label for="id_groups" class="required">{% trans 'Groups' %}:</label> {{ form.groups }} 
    <p class="help">{% trans 'All existing Groups listed here. If you are not seeing any group, means you dont have any groups object created.' %}</p> 
</div> 

<script type="text/javascript">document.getElementById("id_username").focus();</script> 

</fieldset> 
{% endblock %} 

을 그리고 당신은 갈 수 있습니다 . 작동 스 니펫.

0

호기심에서 벗어난이 유형의 솔루션은 장고에서 정결 한 것으로 간주됩니까? 즉, Django 개발자가 홍보하는 DRY 원칙에 위배되는 코드 복사/붙여 넣기 같은 것 같습니다.

+1

DRY는 가능할 때마다 아주 좋은 습관입니다 - 때로는 미세 조정이 이러한 연습에 반대해야합니다. – Alvin