简体   繁体   中英

django views, getting request and using it as a parameter

I'm very confused about this right now, so I know when there's a simple code like the below

def text_detail(request ,course_pk, step_pk):
    step = get_object_or_404(Text, course_id = course_pk, pk=step_pk)

course_pk and step_pk from the url, and those requests are set equal to course_id and pk here. but what I don't understand is what is course_id and pk here? I mean, course_id is from Course model which is foreignkey to step. so it's self.Course.id so it's course_id. But then, how about the next one pk? shouldn't it be step_id = step_pk? when it's just pk how does django know which pk it is? Sorry if the question is very confusing, I'm very confused right now.

Edit

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

Actually the get_or_404() method doing a similar/exact job as below,

try:
    return Text.object.get(pk=step_pk,course_id = course_pk)
except Text.DoesNotExist:
    raise Http404

You can read the source code of the same here

What is course_id and pk ?
Both are attributes of your Text model, as the name indicates pk is your Primary Key of Text model and course_id is the id / pk of course field which is a FK.

EDIT
Text is inherited from Step model so, it will show properties of usual python class.Hence, the Text model be like this internally (not-exact)

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



Example

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 assignment and all those stuffs are entirely depends on your choice and logic. So If you need to get a Text instance in your view, do as below,

text = get_object_or_404(Text, pk = pk_of_TEXT_instance)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM