実行時にajaxを使用してフォームセットにフォームを動的に追加する必要があります。これについては、Ajaxを使用してDjangoフォームセットにフォームを動的に追加することを指します。
同じページに異なるプレフィックスを持つ複数のフォームセットがあります。
私のモデルは次のように設計されています。ユーザーは多くの電話を持つことができます。電話には多くの回線を含めることができます(詳細が必要な場合) Formsetsの多対多の「スルー」リレーションフィールドへのアクセス
ユーザーが新しい電話を追加したら、ajaxを使用して電話を保存します。ビューは次のとおりです
def addUserPhone(request, customer_id, location_id, user_id, **kwargs):
error_msg = u"No POST data sent."
context = {}
if request.is_ajax():
if request.method == "POST":
user = End_User.objects.get(id=user_id)
phone_client = PartialPhone_ClientForm(request.POST, prefix='new_client')
instance = phone_client.save()
#associate user to a phone
instance.end_user.add(user)
#Creating an empty lineFormset for a phone
LineFormSet = modelformset_factory(Line, form=Line_Form, can_delete=True)
client_lines = LineFormSet(queryset=Line.objects.none(), prefix='phone_client_'+str(instance.id))
# how to return the two objects instance and client_lines back to the template??
#format = 'json'
#mimetype = 'application/javascript'
#data = serializers.serialize(format, [instance])
#return HttpResponse(data)
#can we return as a context?? this gives me only a string "phoneline_set" in the template
context['phone'] = instance
context['line_set'] = client_lines
return HttpResponse(context)
else:
error_msg = u"Insufficient POST data (need 'Name ' and 'Telephone Number'!)"
else:
error_msg = "Non Ajax"
return HttpResponseServerError(error_msg)
電話インスタンスとLineFormSetをテンプレートでレンダリングするためのビューに戻すための最良の方法は何ですか?
コンテキストを返すだけの場合、ビューは文字列「phoneline_set」のみを取得します。しかし、私は次のようなことをしたい
$.post("addUserPhone/",phoneData,function(data){
$('.scroll').append("<h2> {{ line_set }} </h2>")
});
Jsonを使用してシリアル化して渡す場合、LineFormSetを渡してテンプレートで使用するにはどうすればよいですか?現在、client_linesフォームセットをシリアル化しようとすると、エラーAttributeErrorが発生します:'LineFormFormSet'オブジェクトには属性'_meta'がありません
どんな助けでもありがたいです、ありがとう!