2012-04-18 2 views
1

Django의 관리자는 GET 변수를 사용하여 '객체 추가'양식의 필드를 설정하는 방법을 보았습니다 (예 : /admin/app/model/add?title=lol은 '제목'필드를 'lol'로 설정합니다).Django admin : GET 변수에서 새 객체를 채우는 방법?

그러나 저는 /admin/app/model/add?key=18 라인을 따라 뭔가를하고 다른 필드의 인스턴스에서 내 필드의 기본 데이터를로드 할 수 있기를 원합니다. 이상적으로는 양식을 채우는 값에 대한 일부 처리를 수행 할 수 있기를 바랍니다. 어떻게해야합니까?

답변

4

에 삽입됩니다. 전체 add_view 메서드를 무시하면 너무 혼란스러워 보였습니다. 감사하게도 Django는 requestGET dict (admin 양식을 미리 채우는 데 사용)을 바꿀 수 있습니다. 은 나를 위해 일한 다음 :

class ArticleAdmin(admin.ModelAdmin): 
    // ... 

    def add_view(self, request, form_url='', extra_context=None): 
     source_id = request.GET.get('source',None) 
     if source_id != None: 
      source = FeedPost.objects.get(id=source_id) 
      // any extra processing can go here... 
      g = request.GET.copy() 
      g.update({ 
       'title':source.title, 
       'contents':source.description + u"... \n\n[" + source.url + "]", 
      }) 

      request.GET = g 

     return super(ArticleAdmin, self).add_view(request, form_url, extra_context) 

이 방법은, 내가 URL의 매개 변수에서 '소스'오브젝트를 취득, 나는 그들과 함께하고 싶은 일을 내가 그것에서 필요로하는 값을로드하고 미리 채울 형태.

+0

이것은 매우 도움이됩니다! – abidibo

2

add_viewModelAdmin 인스턴스를 재정의 할 수 있습니다. 거기에 객체를 추가하고 객체의 pkNone으로 설정하고 해당 객체를 instance으로 양식에 제공하십시오. pk == None의 개체는 항상 데이터베이스의 새 개체로 양식의 save()

+0

나는 당신이 무슨 뜻인지 모르겠다. 나는 add_view로 놀았다. 그러나 super 메서드는 렌더링 된 폼을 반환하며 미리 채우는 방법을 모르겠습니다. – egasimus

+1

아직 수퍼 메소드를 사용하지 마십시오. [form creation] (https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L936) 만 변경하면 객체를 '초기'로 사용할 수 있습니다. 'get_form'을 오버라이드하고 올바른'instance' 내장 된 폼 클래스를 생성 할 수 있습니다. 더 건조하고 더 복잡한 코드가 될 것입니다. – ilvar