добавить кнопку Ajax в Django, чтобы обновить выбор пользователя - PullRequest
1 голос
/ 02 июня 2019

Я следовал руководству Mozilla, описанному здесь , и внес некоторые изменения, чтобы превратить его в библиотеку фильмов.

Я хотел бы добавить опцию для пользователя, когда он открывает фильм, чтобы иметь возможность пометить его как "увиденный". Я хотел бы сделать это с помощью ajax, чтобы кнопка, которую нажимал пользователь, также менялась без обновления страницы.

Это модель, используемая для хранения выбора пользователя

class Seenit(models.Model):
    username = models.CharField(max_length=150)
    movieid = models.ForeignKey('Movie', on_delete=models.CASCADE)
    haveyouseenit = models.BooleanField(default=False, null=True, blank=True)

    def __str__(self):
        return f"{self.username}|{self.movieid.id}"

это от urls.py

re_path(r'^add_to_seen/(?P<pk>.*)', views.Addseen.as_view(), name='add_to_seen')

Это от views.py

class Addseen(generic.DetailView):
    model = Seenit

    def get(self, request, *args, **kwargs):
        if request.is_ajax():
            check = get_object_or_404(Seenit, movieid=id, username=request.user.get_username())
            if not check.haveyouseenit:
                check.haveyouseenit == True
                check.save()
                return HttpResponse("1")
            else:
                check.haveyouseenit == False
                check.save()
                return HttpResponse("0")

и это от movie_details.html, показывающего кнопку вместе с попыткой, которую я предпринял для кнопки ajax.

    <div id="seen">
        {%  if user.is_authenticated  %}
            <button class="add_button" id="seen">Have seen</button>
            <b style="color: #3b97f4" id="message"></b>
            {%  if seen %}
                <script>
                    $("#seen").css({"background-color": "#f4b6e0", "color": "white"});
                </script>
            {% endif %}
        {% endif %}
                    <script>
                    $(document).ready(function () {
                        $("#seen").click(function () {
                            $.get("/add_to_seen/{{ movie.id }}", function (msg) {
                                if (msg === "1") {
                                    $("#seen").css({"background-color": "#f4f15f", "color": "white"});
                                    $("#message").html("Added to Seen!").fadeIn("fast").fadeOut("slow");
                                }
                                if (msg === "0") {
                                    $("#seen").css({"background-color": "white", "color": "black"});
                                    $("#message").html("Deleted from Seen!").fadeIn("fast").fadeOut("slow");
                                }
                            });
                        });
                    });
                </script>
    </div>

Кнопка появляется, когда я захожу в фильм, но она ничего не делает. Я очень новичок в django и javascript / ajax, поэтому любую информацию, которую вы можете предоставить, объясните.

1 Ответ

1 голос
/ 02 июня 2019
<button class="add_button" id="seen" onclick="Seen({{movie.id}})">Have seen</button>

в JavaScript:

function Seen(n){
var patch = '{% url "add_to_seen" %}'
info = {'pk':n, 'csrfmiddlewaretoken':"{{ csrf_token }}"}

$.ajax({
  type: "POST",
  url: patch,
  data:info,
    datatype:'json',

success: function(){

console.log('success')
return

}


})
}

просмотров:

 def Addseen(request):
    if request.method == 'POST':
        response_json = request.POST
        response_json = json.dumps(response_json)
        data = json.loads(response_json)
        pk = data['pk']
           #do whatever you have to do with the model.

       return JsonResponse(safe=False)

Если вам нужна дополнительная помощь, позвольте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...