Как заставить мой django views.py читать лист excel и отображать пустую ячейку, а не "nan"

Я работаю над проектом, используя django и plotly. Он считывает данные с листа excel и отображает их соответствующим образом. Все работает, за исключением того, что у меня есть столбец дочерних опросов, который заполнен только некоторыми родительскими опросами. Из-за этого в ячейках без дочернего опроса отображается "nan", а не просто пусто. вот моя функция в файле views.py:

def survey_status_view(request):
    # Fetch data for all CLINs and calculate necessary values
    clin_data = []

    # Get all unique combinations of CLIN and child survey
    unique_clins = SurveyData.objects.values('clin', 'survey_child').distinct()

    for clin in unique_clins:
        clin_id = clin['clin']
        child_survey = clin['survey_child']

        # Check if the child_survey is 'None' (the string), and handle it appropriately
        if child_survey == 'None':
            child_survey = ''  # Replace 'None' with an empty string

        # Filter by both clin and child_survey
        survey_data = SurveyData.objects.filter(clin=clin_id, survey_child=child_survey)

        # Total units for the current CLIN and child survey
        total_units = survey_data.first().units if survey_data.exists() else 0

        # Count redeemed units based on non-null redemption dates
        redeemed_count = survey_data.filter(redemption_date__isnull=False).count()

        # Calculate funds for this CLIN and child survey
        total_funds = total_units * survey_data.first().denomination if total_units > 0 else 0
        spent_funds = redeemed_count * survey_data.first().denomination if redeemed_count > 0 else 0
        remaining_funds = total_funds - spent_funds

        # Append results for this CLIN and child survey
        clin_data.append({
            'clin': clin_id,
            'survey': survey_data.first().survey if survey_data.exists() else '',
            'child_survey': child_survey,  # Use the updated child_survey with empty string if it's 'None'
            'status': survey_data.first().status if survey_data.exists() else '',
            'launch_date': survey_data.first().launch_date if survey_data.exists() else '',
            'expiration_date': survey_data.first().expiration_date if survey_data.exists() else '',
            'total_units': total_units,
            'redeemed_count': redeemed_count,
            'spent_funds': spent_funds,
            'total_funds': total_funds,
            'remaining_funds': remaining_funds,
            'redemption_rate': (redeemed_count / total_units * 100) if total_units > 0 else 0,
        })

    # Log the results for debugging
    for data in clin_data:
        print(f"CLIN: {data['clin']}, Child Survey: {data['child_survey']}, Total Units: {data['total_units']}, "
              f"Redeemed Count: {data['redeemed_count']}, Spent Funds: {data['spent_funds']}, "
              f"Remaining Funds: {data['remaining_funds']}")

    # Render the data in the template
    return render(request, 'surveyStatus.html', {'clin_data': clin_data})

и вот html, связанный с ним, но я не думаю, что проблема именно в этом:

Я пробовал chatgpt и это мой следующий источник. пожалуйста, кто-нибудь помогите брату.

Можете ли вы попробовать сделать это в html?

<td>{{ clin.child_survey|default_if_none:"" }}</td>

или вы можете попробовать это на просмотрах?

unique_clins = SurveyData.objects.annotate(
    child_survey_filled=Coalesce('survey_child', Value(''))
).values('clin', 'child_survey_filled').distinct()

В этом коде функция Coalesce заполняет значения None в базе данных пустыми строками. Таким образом, в данных, поступающих из базы данных, будет None.

Вернуться на верх