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 并解决了这个问题。
我有一个简单的(我认为)问题,关于 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 并解决了这个问题。