Как заставить мой 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.