2013-02-02 3 views
0

Django Framework를 배우고 있는데 질문이 있습니다. 그대로 우리가 DB에 어떤 테이블이 있다고 가정django admin에서 데이터를 편집하는 방법

:

CREATE TABLE names (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100)); 

과 같이 내가 장고 관리자에서 폼을 가지고 : 당신은 내가 시도하고 아래의 예를 사용하여 설명 할 것이다 이해하는 데 도움이

<form> 
    <textarea name="names"></textarea> 
    <input type="submit" name="sbt" value="Submit"> 
</form> 

사용자가 양식의 입력 names에 무엇인가를 입력하여 제출했습니다. 그런 다음 스크립트는이 데이터를 캐치하여 배열 (str.split("\n"))과 테이블 이름에 사이클을 추가합니다.

그리고 많은 quetion :

  1. 내가 장고 관리자에 양식을 추가 할 수 있습니까?
  2. 어떻게 양식 데이터를 잡아서이 데이터를 데이터베이스의 somethink 테이블에 추가 할 수 있습니까?

감사합니다.

답변

0

먼저 장고 모델을 만들어야합니다.

이 코드를 models.py에 넣으십시오.

class Names(models.Model): 
    name = models.CharField(max_length = 100) 

그런 다음 관리자 모델을 만들어야합니다.

이 코드를 admin.py에 넣으십시오.

class NamesAdmin(admin.ModelAdmin): 
    list_display = ['name'] 
    # whatever you want in your admin panel like filter, search and ... 

admin.site.register(Names, NamesAdmin) 

귀하의 요청에 부합한다고 생각합니다. 그리고 이름을 나누기 위해 모델 메서드를 저장하고 거기에있는 이름을 나눌 수 있습니다. 그러나 추가 양식을 원한다면 쉽게 장고 모델 양식을 만들 수 있습니다.

은 모델과 양식의 admin.py, views.py 또는 forms.py

class NamesForm(forms.ModelForm) 
    class Meta: 
     model = Names 

처럼 어딘가에 코드를 넣습니다. 그래서 장고 관리 패널에 양식을 추가하려면 django admin에서 양식을 만들어야합니다. 이를 위해 뷰를 공통으로 만듭니다.

코드를 admin.py 또는 views.py에 넣으십시오.

def spliter(req): 
    if req.method == 'POST': 
     form = NamesForm(req.POST) 
     if form.is_valid(): 
      for name in form.cleaned_data['names'].split(' '): 
       Names(name = name).save() 
       return HttpResponseRedirect('') # wherever you want to redirect 
     return render(req, 'names.html', {'form': form}) 
    return render(req, 'names.html', {'form': NamesForm()}) 

names.html을 작성하고 아래 코드를 HTML 페이지에 삽입해야합니다.

{% extends 'admin/base_site.html' %} 

{% block content %} 
    <!-- /admin/names/spliter/ is your url in admin panel (you can change it whatever you want) --> 
    <form action="/admin/names/spliter/" method="post" >{% csrf_token %} 
     {{ form }} 
     <input type="submit" value="'Send'" > 
    </form> 
{% endblock %} 

이것은 귀하의 의견이며 어디에서나 사용할 수 있습니다. 그러나 관리자 만이 페이지를 볼 수있는 권한을 갖고 싶다면 NamesAdmin 클래스도이 방법을 추가해야합니다.

def get_urls(self): 
    return patterns(
     '', 
     (r'^spliter/$', self.admin_site.admin_view(spliter)) # spliter is your view 
    ) + super(NamesAdmin, self).get_urls() 

That 's It. 이게 당신을 도울 수 있기를 바랍니다.

+0

대단히 감사합니다. – Nolik

관련 문제