Django 对象 "lock" 和上下文渲染

Django object "lock" and context rendering

我有一个简单的(我认为)问题,关于 Django 上下文渲染。

我会直接介入 -

基本上我需要的是一些温度 table,在我的例子中,我称之为 Locked。当用户按下一个按钮时,它是一个表单,该对象直接进入 table 锁定(只是一个简单的插入)。在 table 中有一个名为 is_locked 的字段,如果它是 True,则该对象需要变灰,或者在 html table 中有一些锁定图标。

只是某种可见标志,表明某个对象位于 table 锁内,并且其他用户无法访问它。

但是,我的问题是,因为在我的 views.py 中,我的 lock 函数没有返回准确的 html 我想渲染储物柜图标的地方,相反,它 returns 另一个 html。

有没有办法在 2 html 页上呈现相同的上下文?谢谢

这是我的代码:

views.py


def lock(request, pk):
    # Linking by pk.
    opp = get_object_or_404(OpportunityList, pk=pk)
    opp_locked = get_object_or_404(Locked, pk=pk)
    # Taking two parametters for 2 fields.
    eluid = Elementiur.objects.get(eluid=pk)
    user = User.objects.get(username=request.user)

    # Dont bother with this one! Just pulling one field value.
    field_name = 'optika_korisnik'
    obj = OpportunityList.objects.get(pk=pk)
    field_object = OpportunityList._meta.get_field(field_name)
    field_value = getattr(obj, field_object.attname)

    # This is the main part! This is where i'm inserting data into Locked table.
    if opp_locked.DoesNotExist:
        opp_locked.id = int(eluid.eluid)
        opp_locked.locked_eluid = eluid
        opp_locked.locked_comment = field_value
        opp_locked.locked_user = user
        opp_locked.locked_name = 'Zaključao korisnik - ' + request.user.username
        opp_locked.is_locked = True
        opp_locked.save()
        # This is what has to be returned, but i need context on the other page.
        return render(request, 'opportunity/detalji/poziv.html',
                      {'opp': opp, 'locked': opp_locked})
    else:
        # This return has the context that i need(from the first opp_locked variable)
        return render(request, 'opportunity/opp_optika.html', {'locked_test': opp_locked})

我可以提供更多代码,但我认为这对于这类问题并不重要,因为所有逻辑都发生在 lock 函数中,最后两个 returns.

我刚刚快速浏览了您的代码段,抱歉,如果这对您没有帮助,但您需要稍微回顾一下。

您在锁定模型的实例上调用 DoesNotExist if opp_locked.DoesNotExist: [...] 那不是你应该如何使用 this exception.

您有一个方法 .exists() 可用,但仅适用于 Querysets

此外,如果您的实例不存在,您在使用 get_object_or_404() 方法时会返回 Http404 响应。

也许您应该避免在实例之间共享主键并将它们替换为 models.OneToOneField (OneToOnefield)

因为我没有得到答案,所以我在我的 Locked 模型中添加了一个新字段 is_locked 并解决了这个问题。