【问题标题】:How to pass a value from anchor tag to a function in views in Django如何将锚标记中的值传递给Django视图中的函数
【发布时间】:2021-07-18 14:54:34
【问题描述】:

我有一个模型对象movie,我想将movie.mid 传递给视图中的addmovie 函数

views.py

def addMovie(request, mid):
    uid = request.user.id
    ob = MyMovies.objects(uid=uid, mid=mid, watched=True)
    ob.save();
    return redirect('/')

urls.py

path('addmovie/<int:mid>/', views.addMovie, name="addmovie"),

index.html

{% if movies %}
    <section id="main">
        <h2 class="latest-heading">Movies</h2>
        <ul id="autoWidth2" class="cs-hidden">
            {% for movie in movies %}
                <li class="item-a">
                    <div class="latest-box">
                        <div class="latest-b-img">
                            <!-- <a href="{% url 'movieinfo' %}" title=""> -->
                            <img src={{ movie.cover }}>
                            <!-- </a> -->
                        </div>
                        <div class="latest-b-text">
                            <strong>{{movie.title}}</strong>
                            <p>{{movie.rdate}}</p>
                        </div>
                        {% if user.is_authenticated %}
                            <div>
                                <a href="{% url 'addmovie' movie.mid %}" style="color:chocolate;">Add to watched</a>
                            </div>
                            <br>
                        {% endif %}
                    </div>
                </li>
            {% endfor %}
        </ul>
    </section>
{% endif %}

即使正确传递了值,MyMovies 中的值也不会更新。我做错了什么?

【问题讨论】:

    标签: html django view


    【解决方案1】:
    def addMovie(request, mid):
       if request.method == "POST":
          mid = request.POST['data'] # the problem is here, you are overriding mid default value
          uid = request.user.id
          try:
             my_movie = MyMovies.objects.get(mid=mid)
             my_movie.watched = True
          except:
             my_movie = MyMovies(uid=uid, mid=mid, watched=True)
          my_movie.save()
          return redirect('/')
    

    【讨论】:

    • 嘿,我已经更新了问题中的代码。其实我之前在尝试其他的东西,忘记改回来了
    • 目前,我收到一个错误,即 Manager Object is not callable
    • 是的,因为要保存一个对象,您可以像这样调用 MyMovies(uid=uid, mid=mid, watched=True) 但是如果您想更新现有电影,那么您必须获取该对象然后更新它。
    【解决方案2】:

    您需要在网址名称后添加movie.mid,例如&lt;a href="{% url 'addmovie' movie.mid %}" style="color:chocolate;"&gt;Add to watched&lt;/a&gt;&lt;/div&gt;

    然后,movie.mid 将传递给url.py。你需要在url.py上添加一个参数。
    url.py

    path('addmovie/<int:mid>/',views.addmovie)
    

    那么你需要传递给views.py

    def addmovie(request,mid):
    

    【讨论】:

    • 嘿,我已经更新了代码,但仍然面临一些问题。再次检查问题陈述。谢谢
    • 另外我的mid是charfield,那我应该做些什么改变呢?
    • 感谢问题已解决
    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2015-01-21
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多