'how to work with foreign key field in django

Hi Everyone i am working work django framework, where i used to upload excel file in Dailytrip table, current i get car_mumber from car table, but now i need to store car_number from Car_team table also team_id, i am storing car_id and team_id in car_team table also i need to store team_id in dailytrip table automaticlly based on car_id(car_number) i am to much confuse how to i work that, pls help me out

models.py

class Car_team(BaseModel):
    team = models.ForeignKey(
        Team,
        models.CASCADE,
        verbose_name='Team',
        null=True,
    )
    car=models.ForeignKey(
        Car, 
        models.CASCADE, 
        verbose_name='Car', 
        null=True)
    city =models.ForeignKey(
        City,
        models.CASCADE,
        verbose_name='City',
    )
    start_date=models.DateField(null=True, blank=True)
    end_date=models.DateField(null=True, blank=True) 

views.py

def add_payout_uber_daily_data(request):
    if request.method == 'POST':
        form = UberPerformanceDataForm(request.POST, request.FILES, request=request)

        if form.is_valid():
            date = form.cleaned_data['date']
            excel_file = request.FILES['file']
            df = pd.read_excel(excel_file)
            is_na = pd.isna(df['Date']).sum().sum() + pd.isna(df['Name']).sum().sum() + pd.isna(df['UUID']).sum().sum() + pd.isna(df['Net Fare With Toll']).sum().sum() + pd.isna(df['Trips']).sum().sum() + pd.isna(df['Uber KMs']).sum().sum() + pd.isna(df['CashCollected']).sum().sum() + pd.isna(df['UberToll']).sum().sum() + pd.isna(df['Tips']).sum().sum() + pd.isna(df['Hours Online']).sum().sum() + pd.isna(df['Ratings']).sum().sum() + pd.isna(df['Acceptance Rate']).sum().sum() + pd.isna(df['Cancellation Rate']).sum().sum()

            error_list = []

            if is_na > 0:
                error_list.append('Found #N/A or blank values in the sheet. Please correct and re-upload')
                context = {'error_list': error_list, 'menu_payout': 'active','submenu_daily_data': 'active','form': form, }
                return render(request, 'add_payout_uber_daily_data.html', context=context)


            date_match = True
            for d in df['Date']:
                if str(d.strftime("%Y-%m-%d")) != str(date):
                    date_match = False
                    break
                    
            if  not date_match:
                error_list.append('Some dates are not matching in excel')
                
            if len(error_list) > 0:
                context = {'error_list': error_list, 'menu_payout': 'active','submenu_daily_data': 'active','form': form, }
                return render(request, 'add_payout_uber_daily_data.html', context=context)

            DailyTrip.objects.filter(date=date).update(is_active=0)
            for i in df.index:
                uuid = df['UUID'][i]
                driver_id = None
                car_id = None
                fleet_id = None
                manager_id = None

                try:
                    driver = Driver.objects.get(uber_uuid=uuid)
                    driver_id = driver.id
                except Driver.DoesNotExist:
                    driver_id = None


                  #replce car code and store car_number,car_id,team_id via car_team only this logic need to change current get car_number direct car table but we need car_number vai foriegn key 

                try:
                    car = Car.objects.get(car_number=df["Car Number"][i])
                    car_id = car.id
                    manager_id = car.manager_id
                except Car.DoesNotExist:
                    car_id = None



                try:
                    fleet = Fleet.objects.get(name=df["Fleet Name"][i])
                    fleet_id = fleet.id
                except Fleet.DoesNotExist:
                    fleet_id = None
                
                name = df['Name'][i]
                car_number = df['Car Number'][i]
                fare_total = df['Net Fare With Toll'][i]
                trips = df['Trips'][i]
                pool_trips = 0
                hours_online = df['Hours Online'][i]
                total_km = df['Uber KMs'][i]
                cash_collected = abs(df['CashCollected'][i])
                toll = df['UberToll'][i]
                tip_amount = df['Tips'][i]
                fare_avg = float(fare_total)/int(trips)
                fare_per_hour_online = float(fare_total)/float(hours_online)
                fare_per_km = fare_total/total_km
                trips_per_hour = trips/hours_online
                km_per_trip = total_km/trips
                rating = df['Ratings'][i]
                acceptance_rate_perc = float(df['Acceptance Rate'][i])/100
                driver_cancellation_rate = float(df['Cancellation Rate'][i])/100

                        
                obj, created = DailyTrip.all_objects.update_or_create(
                    date=date, uuid=uuid,
                    defaults={
                        'car_id': car_id, 
                        'manager_id': manager_id, 
                        'car_number': car_number, 
                        'driver_id': driver_id, 
                        'car_id': car_id, 
                        'fleet_id': fleet_id, 
                        'driver_name': name, 
                        'fare_total': fare_total, 
                        'trips': trips, 
                        'pool_trips': pool_trips, 
                        'hours_online': hours_online, 
                        'total_km': total_km, 
                        'cash_collected': cash_collected, 
                        'toll': toll, 
                        'tip_amount': tip_amount, 
                        'fare_avg': fare_avg, 
                        'fare_per_hour_online':fare_per_hour_online, 
                        'fare_per_km':fare_per_km, 
                        'trips_per_hour': trips_per_hour, 
                        'km_per_trip': km_per_trip, 
                        'rating': rating, 
                        'acceptance_rate_perc': acceptance_rate_perc,
                        'driver_cancellation_rate': driver_cancellation_rate, 
                        'is_active': 1,
                        'comments': None}
                )

            if len(error_list) > 0:
                DailyTrip.objects.filter(date=date).update(is_active=0)
                context = {'error_list': error_list, 'menu_payout': 'active','submenu_daily_data': 'active','form': form, }
                return render(request, 'add_payout_uber_daily_data.html', context=context)
            else:
                messages.success(request, 'Daily Trips added Successfully...')
                return redirect('/fleet/payout/daily_data/add/uber')
    else:
        form = UberPerformanceDataForm(initial={})

    context = {
        'menu_payout': 'active',
        'submenu_daily_data': 'active',
        'form': form,
    }
    return render(request, 'add_payout_uber_daily_data.html', context=context)


Solution 1:[1]

You can try that : to get car_number from car_team -->

car_team = car_team.objects.objects.all().last() # to get the last car_team for example
car_number = car_team.car.car_number # to get the car number from the car_team

Solution 2:[2]

         try:
            car = Car.objects.get(car_number=df["Car Number"][i])
            car_id = car.id
           
            car1=Car_team.objects.filter(car_id=car_id)
            if car1:
                team_id=car1[0].team_id
            else:
                team_id=None
        except Car.DoesNotExist:
            car_id = None
            team_id= None

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ilyass
Solution 2 Karishma Upadhyay