[英]django views, getting request and using it as a parameter
我现在对此很困惑,所以我知道何时有如下所示的简单代码
def text_detail(request ,course_pk, step_pk):
step = get_object_or_404(Text, course_id = course_pk, pk=step_pk)
网址中的course_pk和step_pk,这些请求在此处设置为等于course_id和pk。 但是我不明白的是这里的course_id和pk? 我的意思是,course_id来自课程模型,这是外键。 所以它是self.Course.id,所以是course_id。 但是,下一个pk呢? 不应该是step_id = step_pk? 当只是pk时,django怎么知道它是哪个pk? 很抱歉,如果这个问题很令人困惑,我现在很困惑。
编辑
class Step(models.Model):
title = models.CharField(max_length=200)
description = models.CharField()
order = models.IntegerField(default=0)
course = models.ForeignKey(Course)
class Meta:
abstract = True
ordering = ['order',]
def __str__(self):
self.title
class Text(Step):
content = models.TextField(blank=True, default="")
实际上, get_or_404()
方法完成了以下类似/精确的工作,
try:
return Text.object.get(pk=step_pk,course_id = course_pk)
except Text.DoesNotExist:
raise Http404
您可以在此处阅读相同的源代码
什么是course_id
和pk
?
两者都是Text
模型的属性,顾名思义pk
是Text
模型的主键,而course_id
是course
字段的id
/ pk
,即FK。
编辑
Text
是从Step
模型继承的,因此它将显示普通python类的属性。因此, Text
模型在内部是这样的(不精确)
class Text(models.Model):
content = models.TextField(blank=True, default="")
title = models.CharField(max_length=200)
description = models.CharField()
order = models.IntegerField(default=0)
course = models.ForeignKey(Course)
class Meta:
ordering = ['order', ]
def __str__(self):
return self.title
例
text = Text.objects.get(id=1) # text instance with id=1
text.course_id # will hold the id of "course" instance which is related to the particular "text" instance
URL分配以及所有这些东西完全取决于您的选择和逻辑。 因此,如果您需要在视图中获取Text
实例,请执行以下操作,
text = get_object_or_404(Text, pk = pk_of_TEXT_instance)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.