2013-03-24 3 views
1

삭제를 위해 각 객체 옆에 라디오 상자가있는 사용자의 판매 객체를 표시하는 장고 양식을 만드는 방법은 무엇입니까? 사용자가 빠른 삭제를 위해 라디오 박스와 함께 나열되는 장고 관리자와 비슷한 것을 만들려고합니다. request.user에서 사용자 데이터로 양식을 렌더링하는 방법은 무엇입니까?

django forms

나는 사용자로부터 판매의 연관된 객체를 얻고 선택 삭제하려면 판매의 목록 을 반환하기 위해 노력하고있어. 지금까지 내 프로필 양식은 다음과 같습니다 다음 views.py에서

class ProfileForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop("request") 
     super(ProfileForm, self).__init__(*args, **kwargs) 

    sells = forms.IntegerField(
     widget=forms.Select(
      sell=Sell.object.filter(user=self.request.uwer) 
     ) 
    ) 

난과 같이 선택 판매 개체를 삭제할 계획 :

for sell in form.sells: 
    sell = Sell.objects.get(id=sell) 
    sell.delete() 

답변

1

잘못 여기에 꽤 몇 가지가있다. 가장 중요한 것은 request.user에 대한 액세스 권한이 없기 때문에 양식 정의에서 선택 사항을 설정할 수 없다는 것입니다.

어쨌든 모델 양식을 원하지 않는다고 생각합니다. 그것들은 모델 인스턴스를 생성하고 편집하기위한 것이지만, 단순히 체크 박스로 기존 인스턴스를 나열하기를 원할뿐입니다. 그래서 당신은 그 인스턴스를 나타내는 필드, 즉 ModelMultipleChoiceField를 가진 일반 폼을 원할뿐입니다.

그래서 양식은 다음과 같습니다

class DeleteSellForm(forms.Form): 
    sells = forms.ModelMultipleChoiceField(queryset=Sell.objects.none(), 
              widget=forms.CheckboxSelectMultiple) 

    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user', None) 
     super(DeleteSellForm, self).__init__(*args, **kwargs) 
     self.fields['sells'].queryset=Sell.objects.filter(user=user) 

당신은 검색어 세트의 디폴트는 none 만이 우리가 사용자에 전달할 수 __init__ 방법, 올바른 사용자의 객체에 설정되어있는 것을 알 수 있습니다 .

def delete_sells(request): 
    if request.POST: 
     form = DeleteSellsForm(request.POST, user=request.user) 
     if form.is_valid(): 
      form.cleaned_data['sells'].delete() 
    else: 
     form = DeleteSellsForm(user=request.user) 
    return render(request, 'template.html', {'form': form}) 

ModelMultipleChoiceField

이 검색어 세트에 청소, 그래서 당신은 직접에 delete()를 호출 할 수 있어야한다 :

그래서 뷰는 다음과 같습니다.

+0

Woops, 실제로 form.Form을 사용하려고했습니다. Model.forms에는'class Meta : ... '가 필요합니다. 감사! 이것은 효과가있다! – davierc

+0

질문이 하나 더 있는데 왜 사용자를 팝업해야합니까? 'user = kwargs.pop ('user', None)'과 같이 – davierc

관련 문제