私は本当にAjaxとDjangoでいくつかの助けが必要です!私はすべてのItem
オブジェクトを反復しようとしています。そのため、それぞれが個々のフォームを持ち、favorite
のアイテムにajaxボタンを付けることができます。ここ は私のフォームである:ここでは(Django)Ajax - 複数のオブジェクト
<div class="row">
{% for item in items%}
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
{% if item.photo %}
<img src="{{ MEDIA_URL }}{{item.photo.url}}">
{% endif %}
<div class="caption">
<h3>{{item.name}}</h3>
<p>{{item.description}}</p>
<h3>Price: {{item.price}}</h3>
<h3>Rating: {{item.rating}}</h3>
<p>
<form id="add_favorite_form">
{% csrf_token %}
<button id='fav' class='btn btn-primary' type="submit" data-itemid="{{item.id}}" value="Favorite">
Favorite
<span class="glyphicon glyphicon-thumbs-up"</span></a>
</form>
</p>
</div>
</div>
</div>
{% endfor %}
</div>
は、Ajaxです:
<script type="text/javascript">
$(document).on('submit', '#add_favorite_form',function(e){
e.preventDefault();
var $fav = $('#fav');
$.ajax({
type: "POST",
url: "/items/favorites/",
data: {
id: $($fav).attr('data-itemid'),
csrfmiddlewaretoken:$("input[name=csrfmiddlewaretoken]").val()
},
success: function(){
alert("button works but is broken. Only the first Item instance is added to favorites")
}
});
});
</script>
そして最後に、私の見解:あなたが見ることができるように、ボタンがdata-*
として
def favorite_item(request):
favorites, created = Favorite.objects.get_or_create(user=request.user)
if request.method == "POST":
id = request.POST['id']
item = Item.objects.get(id=id)
print item
favorites.items.add(item)
favorites.save()
return HttpResponse(' ')
を{{item.id}}
使用していますこれは、個々のitem.id
の値をajaxスクリプトの変数var $fav = $('#fav');
に渡すと仮定しました。ただし、favorites
に追加されたのはItem
オブジェクトだけなので、最初のitem.id
だけが渡されたようです。
どうすればこの問題を解決できますか?助けてくれてありがとう。
idの代わりに 'fav'をクラスとして定義します。 –
@AvinashRajは動作しませんでした。( – tear728
これは間違っています:' {{MEDIA_URL}} {{item.photo.url}} '。 'MEDIA_ROOT'と' MEDIA_URL'を正しく設定した場合、 '{{item.photo.url}}'で十分です(Djangoは必要な基本パスを追加します)。 – Risadinha