2011-02-17 6 views
1

나는 지금까지는 그것을 할 수 없다는 것을 상상할 수없는 형태의 특별한 섹션이 필요합니다. 나는 나 자신을 분명하게하려고 노력할 것이다.Django 임베디드 ManyToMany 양식

"Sale"과 같은 모델이 있다고 가정합니다. 그것은 자연스럽게 판매되는 일련의 제품입니다. ManyToMany와 같은 제품을 선택하고 싶지 않습니다. 단지 "이름"과 "가격"과 같은 두 개의 CharField와 "추가"버튼을 갖고 싶습니다. 이 필드를 채우고 "추가"를 누르면 행 바로 아래 상자에 행을 넣는 아약스 액션이 생깁니다. 이 행에서 '제거'버튼을 클릭하여 행 중 하나를 제거하려는 경우에도 마찬가지입니다.

기본적으로 ManyToMany 필드를 "on-the-fly"방식으로 삽입 할 수 있습니다.

저는 다른 솔루션에도 완전히 열려 있습니다. 감사합니다. .

답변

1

당신에게 맞는 경우, 모든 일은 가장 쉽게 자바 스크립트로 할 수 있습니다. 생성/편집/삭제를위한 핸들러를 생성하십시오. Create는 GET을위한 빈 양식을 렌더링하고 POST에 대한 유효성을 확인/저장하여 속할 판매에 새 항목을 추가합니다. 수정/삭제는 명백하게 따라야합니다.

아마 핸들러가 HTML 부분을 렌더링하고, JavaScript를 사용하여 DOM을 GET으로 가져오고 POST로 서버에 데이터를 변경합니다.

모델을 가정하면,

class Sale(models.Model): 
    items = models.ManyToMany('Item', related_name='sales') 
    # ... 

class Item(models.Model): 
    # ... 

그런 다음 우리는 다음과 같은 몇 가지 핸들러를 만들 수 있습니다 : 프론트 엔드 코드에 대한

def create_item(request, saleID=""): 
    sale = get_object_or_404(Sale, <ID>=saleID) # <- get the sale obj 

    if request.method == 'POST': 
    form = ItemForm(request.POST) # <- could take the sale here and do .add() in the save() 
    if form.is_valid(): 
     i = form.save() 
     sale.items.add(i) # <- or, add in the view here 
     if request.is_ajax(): 
     return HttpResponse('ok') 
     # redirect with messages or what have you if not ajax 
    else: 
    # make a blank form and whatnot 
    # render the form 

def edit_item(request, id|pk|slug=None): 
    item = get_object_or_404(Item, slug=slug) 
    if request.method == 'POST': 
    # do the form is_valid, form save, return 'ok' if ajax, redirect if not ajax 
    else: 
    form = EditForm(instance=item) 
    # render the form 

def delete_item(request, id|pk|slug=None): 
    if request.method == 'POST': 
    # delete the item and redirect, or just return "ok" if is_ajax 
    # render confirmation dialog 

, 내가 http://api.jquery.com/load/ HTTP의 조합을 사용 : //api.jquery를 .com/jQuery.get/및 http://api.jquery.com/jQuery.post/ 등 모든 자바 스크립트 프레임 워크가 수행합니다.

+0

감사합니다. 나는이 방향으로 무언가를 시도 할 것이다! – vmassuchetto

+0

권자, 누군가 2014 년 5 월에 이것을 downvoted ... 음 .. 그래, 지금이 일을 더 나은 방법이있을 수 있습니다, IDK : D 조. –