django - 如何从 django 的视图中访问 onetoone 值?
问题描述
所以我有一个KeyRequest
模型和一个KeyInstance
模型。oneKeyRequest
只能指 one KeyInstance
,反之亦然。每个KeyInstance
都有一个uuid
和一个status
。我想访问它uuid
和可用密钥的数量KeyRequest
这是我的models.py:
class KeyInstance(models.Model):
keyrequest = models.OneToOneField('KeyRequest', verbose_name='Key requests', on_delete=models.SET_NULL, null=True, blank=True, related_name='request')
LOAN_STATUS = (
('a', 'Available'),
('o', 'On loan'),
('r', 'Reserved'),
)
status = models.CharField(max_length=1, choices=LOAN_STATUS, help_text='Key availability', verbose_name="Key status", blank=True)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Unique ID for this particular key")
class Meta:
ordering = ["due_back"]
permissions = (("can_mark_returned", "Set key as returned"),)
@property
def is_overdue(self):
if self.due_back and date.today() > self.due_back:
return True
return False
def __str__(self):
"""
String for representing the Model object
"""
return '{1} ({0})'.format(self.id,self.roomkey.room_name)
def get_absolute_url(self):
"""
Returns the url to access a detail record for this book.
"""
return reverse('keys',args={'pk':self.id})
...
class KeyRequest(models.Model):
"""
Model that will hold the key requests
"""
roomkey = models.ForeignKey('RoomKey',verbose_name="Room", on_delete=models.SET_NULL, null=True)
def __str__(self):
"""
String for representing the Model object
"""
return '{2}-{0} ({1})'.format(self.roomkey.room_name, self.date_requested, self.requester)
def get_absolute_url(self):
return reverse('key-request-detail', args=[str(self.id)])
这是我的views.py:
class KeyRequestDetailView(generic.DetailView):
model = KeyRequest
template_name = "catalog/roomkey_request_detail.html"
def RequestDetail(request):
num_keyinstances_available = KeyInstance.objects.filter(status__exact='a').count()
return render(
request,
'key-request-detail',
context = {'num_key_available':num_keyinstances_available},
)
这是我的模板
{{ keyrequest.request.id }}
{{ num_key_available }}
谁能告诉我这样做的正确方法?
解决方案
看看你能做些什么。我相信它会以某种方式为您指明正确的方向。评论区太长了。上下文字典中的所有内容都将在您的模板中可用。您可以在上下文字典中放入任意数量的内容。
class KeyRequestDetailView(generic.DetailView):
model = KeyRequest
template_name = "catalog/roomkey_request_detail.html"
def get_object(self, queryset=None):
pk = self.kwargs.get('pk', None) # I assume you're using pk to lookup the KeyRequest
keyrequest_instance = KeyRequest.objects.get(pk=pk)
# But if there is no such keyrequest instance you have to handle the error somehow
context = {}
context['keyrequest'] = keyrequest_instance # the actual keyrequest
context['num_key_available'] = KeyInstance.objects.filter(status__exact='a').count() # total number of 'available' keys
key_request_id = keyrequest_instance.keyinstance.id # id of each keyrequest reference from the instance it is tied to
key_request_status = keyrequest_instance.keyinstance.status # status of each keyrequest reference from the instance it is tied to
return render(request, "catalog/roomkey_request_detail.html", context)
推荐阅读
- testing - 使用 IRetryAnalyzer 作为监听器时未生成 Cucumber 报告
- python - 如何计算任何算法为给出最终结果所采取的步数?
- sql - Scala如何提取URL中的子字符串并为其创建一个新列?
- kubernetes - Kubernetes 的容器 CPU 请求值
- javascript - 如何对特殊的 JSON Discod.JS 进行排序
- firebase-hosting - Cloud Run + Firebase 托管区域重写问题
- javascript - Lighthouse 返回错误:内部:扩展结果为空
- asp.net - 图像未按预期加载 ASP.NET MVC
- woocommerce - Woocommerce - 即使某些变体有库存,可变产品也会显示已售罄
- python-2.7 - Tkinter 没有 $DISPLAY 或显示名称(Berkley pacman 项目)