2011-11-14 15 views
2

私はdjangoフォームを構築しています外部キーを使用したDjangoフォームの照会なし

私のモデルは顧客に希望リストがあります。顧客は多くの希望リスト項目を持つことができます。私は、顧客ビューから欲しいリスト項目を追加します。私の問題は、私が希望リストフォームをレンダリングすると、すべての顧客とのドロップダウンがあることです。 teditable=Falseを設定してドロップダウンを削除しました。しかし、今私はフォーム上に編集不可能な項目を表示したい。 Submitで編集不可能な値を戻します。私はWishlist.customerにfalseに編集可能に設定した場合

はIすることができます:

  1. はビューでこの値を設定し、表示目的のみ のためにHTMLにそれを渡しますか?

  2. 編集不可のwishlist.customerに処理のためにフォーム提出が返されましたか?

--------- models.py ------------

class WishList(models.Model): 
    customer = models.ForeignKey(Customer, editable=False) 
    year = models.CharField(max_length=4, blank=True) 
    item = models.CharField(max_length=20, blank=True) 
    color = models.CharField(max_length=20, blank=True) 
    sold = models.BooleanField(default=False) 

-------- forms.py - -----------

class WishListForm(forms.ModelForm): 
    class Meta: 
     model = WishList 
     fields = ['carType', 'year', 'make', 'model', 'miles', 'color', ] 

-------- views.py -------------

@login_required 
def newWishList(request, customer_id): 
    cust = Customer.objects.get(pk=customer_id) 
    return handlePopAdd(request, WishListForm, cust, 'wishList') 

def handlePopAdd(request, addForm, customer, field): 
    if request.method == "POST": 
     form = addForm(request.POST) 
     if form.is_valid(): 
      newObject = form.save() 
    else: 
     form = addForm() 
     # Here I want to set the customer and have it displayed, not editable 
     form.customer=customer 
    pageContext = {'form': form, 'field': field} 
    return render_to_response("popuptemplate.html", pageContext) 

答えて

0

ファーストフォーム定義にタイプミスがあるようです。 fieldsの代わりにfeldsと表示されます。また、コード内のどこにも表示されないいくつかのフィールド名もリストされているので、おそらくこのスニペットに基づいていないでしょう。

あなたが編集可能にしたいフィールドをModelFormにリストするだけです(現在行っているように)。次に、顧客フィールドを含めますが、その表示プロパティをオーバーライドしたhereのようにオーバーライドします。 CharFieldにはreadonly属性が設定されています。

私の個人的な好みは、顧客をフォームから完全に離して、フォームにまったく参加させずに顧客名をテンプレートに表示することです。フォームの上にヘッダータグのようなものを入れて、データがどの顧客のものかを明確にします。