我现在对此非常困惑, 所以我知道什么时候有一个简单的代码,如下面的
def text_detail(request ,course_pk, step_pk):
step = get_object_or_404(Text, course_id = course_pk, pk=step_pk)
来自url的course_pk和step_pk,这些请求在此处设置为等于course_id和pk。但我不明白的是course_id和pk在这里是什么?我的意思是,course_id来自课程模型,这是一步到位的外键。所以它是self.Course.id所以它是course_id。但那么,下一个PK怎么样?不应该是step_id = step_pk吗?当它只是pk django怎么知道它是什么? 对不起,如果问题非常混乱,我现在很困惑。
修改
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="")
答案 0 :(得分:0)
实际上get_or_404()
方法执行如下相似/确切的工作,
try:
return Text.object.get(pk=step_pk,course_id = course_pk)
except Text.DoesNotExist:
raise Http404
您可以阅读source code of the same here
什么是course_id
和pk
?
两者都是Text
模型的属性,因为名称表示pk
是Text
模型的主键,course_id
是id
/ {{1} } pk
字段是FK。
编辑
course
继承自Text
模型,因此,它将显示通常的python类的属性。因此,Step
模型在内部(不完全)是这样的
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
URL分配和所有这些东西完全取决于您的选择和逻辑。因此,如果您需要在视图中显示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
个实例,请执行以下操作,
Text