【问题标题】:Django get current Model IDDjango 获取当前模型 ID
【发布时间】:2022-01-21 18:21:59
【问题描述】:

美好的一天, 对于每个创建的标题,我都有一个删除 btn。当您单击删除按钮时,模型将使用 url localhost:8000/delete/OBJECT_ID 删除

models.py

class NewTitle(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        default=None,
        null=True,
        on_delete=models.CASCADE,
    )
    title = models.CharField(max_length=200)
    creator_adress = models.GenericIPAddressField(null=True)
    id = models.BigAutoField(primary_key=True)

    def __str__(self):
        return str(self.title)

views.py

def title_view(request):
    custom_title_id = random.randint(1111, 1111111111111)

    titles =  # What to here, maybe NewTitle.pk?

    if request.method == 'POST':
        form = NewTitleForm(request.POST, instance=NewTitle(user=request.user))
        if form.is_valid():
            obj = form.save(commit=False)
            obj.creator_adress = get_client_ip(request)

            obj.id = custom_title_id
            while NewTitle.objects.filter(id=obj.id).exists():
                obj.id = random.randint(111, 11111111111)

            obj.save()
            return redirect('/another')
    else:
        form = NewTitleForm()
    return render(request, 'test.html', {'form': form, 'titles': titles})


def title_delete(request, title_id):

    user_title = NewTitle.objects.filter(id=title_id,
                                         user=request.user)
    if user_title:
        user_title.delete()
    else:
        return redirect('https://example.com')
    return HttpResponseRedirect('/another')

test.html

 {% for i in request.user.newtitle_set.all %}
    <p> {% if i.user == request.user %} {{ i.title }} {% endif %} <form action="delete/ #THE CURRENT OBJECT ID" method="POST">{% csrf_token %}<button type="submit">Delete Title</button></form> </p>
    {% endfor %}

每个“标题”都显示在模板中。在每个标题旁边都有一个删除按钮,用于删除/OBJECT_ID。如何将 action="" 设置为正确的删除 URL。这样我就可以得到标题(对象)的当前 ID。

有趣的部分是在views.py 中的titles 变量和在test.html 中的第二种形式action=""

非常感谢! :-)

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以使用 url 模板过滤器,但首先您需要为导致 title_delete 的 url 命名(例如“delete_title”)。 然后对于按钮,您可以编写 action={% url 'delete_title' i.id %} 。 它会自动创建指向title_delete视图的url,并将id放在请求路径中。

    【讨论】:

    • 意味着我需要添加一个 href 和一个动作。我该如何实现呢?
    • @rPi 我的意思是行动,我编辑了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2014-04-03
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多