django查看,获取请求并将其用作参数

时间:2018-03-27 02:21:29

标签: python django

我现在对此非常困惑, 所以我知道什么时候有一个简单的代码,如下面的

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="")

1 个答案:

答案 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_idpk
两者都是Text模型的属性,因为名称表示pkText模型的主键,course_idid / {{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