00:00 Now it's time to service the car. So, we got a couple of options here, 00:04 one possibility would just be let's get a service, 00:08 like a random car we grab from the database, 00:10 the other would be to go over here and implement list cars. 00:13 So let's actually go ahead and do this list cars here, 00:17 so we could hit list cars and then we can ask for the id 00:20 or something to that effect of the car. 00:23 Ok, so let's go over here and talk about listing the cars, 00:26 we haven't done any queries yet, everything we've really done so far is inserts 00:30 and that's really straightforward, right, we've seen that we create an object, 00:33 we set some properties, they may be complicated properties 00:36 but nonetheless, we just set the properties and we call save. 00:39 For listing or any sort of query, we're going to come over here 00:43 and we're going to do something different, 00:46 so what we want to query are the cars, so we want to say car.objects, 00:50 now there's a couple of things we can do, 00:53 we can come over here and we can say filter and set something 00:57 or if you're doing a single filter, you could actually do it right here, 01:00 I'll do it the long way then we'll tighten it up, 01:02 I'm not sure there's really any benefit other than whatever you feel like typing, 01:06 do you want to be more explicit or do you want to have code be more concise. 01:10 We could come over here and we could do a filter on the car, 01:14 we could say I want to see only the cars 01:17 that are a particular year or something like that, 01:20 so I'm not sure we really need to filter it all, really all we want to do is sort them, 01:26 so was say order by and then what we're going to do is 01:30 we're going to say the thing that we want to order by, 01:32 and for order by, we use string, so let's order by the year 01:38 and let's just get with this for just a minute, 01:41 so we'll say cars equal this, and then for car in cars 01:45 we want to print out, let's say the make, the model and vin, something like this. 01:53 So here we'll say car.make, car.model, car. vi_number, 02:01 okay excellent, so that should print those out 02:04 and let's do maybe a little extra line at the end. 02:06 Let's go ahead and test this, and see if everything is working, 02:09 so let's list the cars, excellent, surprise it's all Ferraries, 02:12 remember, we are a Ferrari dealership, and this is not super helpful 02:15 because it doesn't show us the year, 02:18 I want to show you that the order is working, and if you don't see that 02:21 you're not going to be able to verify whether this is working or not. 02:26 So let's do this, we'll come over here and we'll say car.year, 02:29 do it one more time, now we list, all right look at that, 02:32 so 1991, 2000, 2005, 2005 and 2017, perfect it's working, 02:36 but I'd kind of want to see the new ones first, 02:40 although maybe in terms of service, seeing the ones is what we want, 02:43 let's say we want to get them in reverse, so put a negative here, 02:46 02:50 here we go, now we're sorting the cars, newest to oldest, 02:53 sorting by year, descending, okay, so that's working really well, 02:57 so what we want to do is basically use this vin number, 03:01 to go find the car we want to service, 03:03 now that we can see the cars I'd like to go say I want to service a car 03:06 and come over here hit s, and it is supposed to say okay 03:09 what car do you want to service, I give it one of these, 03:12 we're going to go to the database, find that car and then insert a service record to it. 03:16 With that mind, let's go and think about this here, 03:21 let's think about actually showing the service history of each car. 03:25 Some number of service records like that, 03:30 format what we want to print out is a len of car.service history 03:34 now this is as far as we're concerned in memory just a Python list, 03:37 so we don't need any database magics, 03:40 like a straight up length will tell us what we're looking for. 03:42 And then for each one of these, we can go and look at it 03:45 so as in card.service history, this doesn't go back to the database a second time, 03:49 that's part of the beauty of just pulling it back as part of the document 03:53 so here we'll print, we'll do like an indent, something like this, 03:56 it'll have let's say we're going to just show the name, 03:59 let's do the price and the name, I think that might do it. 04:04 All right, so we're going to s.price, s.description, 04:09 I believe is what we called it, let's go and run this, 04:13 we should see just zero histories everywhere, 04:16 zero service records so not super interesting, 04:19 but it should become interesting as we write this next thing, 04:22 Alright, so now that we can find the cars, 04:24 the next thing to do is actually service them, 04:27 let's go ahead and write one more query here, and then I'll carry on, 04:30 okay, so first thing we want to do, is we're going to get the vin, 04:33 I'll say input, now in reality, the car would be sitting in front of us, 04:43 here we don't really know, so we need to find a way to get the car right, 04:48 so let's say this, we want to go to the car and we'll say car.objects 04:52 now here's where we really actually are doing the filter stuff 04:55 so we'll say filter— and this is pretty cool, we're going to go to this 04:59 and we're going to basically pretend this function has named parameters 05:04 that in the simple version represents the prototypical json objects, 05:09 we saw from the api, from the Javascript and PyMongo api. 05:14 So let's go to the car real quick, what is the thing we're looking for, 05:17 vi number is what I called it, so we're going to say that equals to vin, 05:22 if we wanted to also match the make = make, right 05:26 model = model, whatever, if we had three things 05:28 we want to do like an and on all three, this is how we would do it, 05:32 but we don't, we just have the vin, now this will give us a list of cars that match this, 05:36 in theory, this should be unique, we haven't got the indexes 05:39 or any other way to make them unique yet, but we can get there, 05:42 now we're expecting one back so we can come here and say first, 05:46 and that should actually pull back the one car 05:48 so instead of getting the cursor, we're going to get either a car or none. 05:51 If we had none, that means it wasn't found, 05:54 so let's say if not car, print car with vin not found, 06:03 06:07 okay so a little bit of error handling there, this doesn't throw an exception if it misses, 06:11 it's just going to be none, all right, so then we'll say print 06:14 we will service let's say car.make, let's see if this works, 06:21 okay so list cars, let's go, let me put in service, say bad vin, 06:29 car with bad vin not found, excellent 06:31 let's try to service this one that has this vin that I copied, 06:34 boom, we will service Ferrari excellent, excellent, 06:37 so we'll go into the database and get it. 06:40 Now that doesn't really prove very much, does it, 06:43 that this is the model, there's only one Testarossa, 06:50 so if I do this, it should say we're going to service the Testarossa, perfect, 06:56 all right, so now, we have everything working beautifully in terms of our filter here, 07:01 now I told you there's two ways to do this, if we have multiple clauses 07:05 and you want to do multiple filters and multiple ifs and conditionals, 07:08 just keep piling on the filters, but if you want a simpler version 07:11 you can actually do it like this, as well, and let's just verify. 07:14 Boom, see, we're going to still service that same car. 07:19 07:23 So now that we have it, how do we get this service record onto the car, 07:27 you'll see there's actually two ways, and they're both pretty decent.