Django.core.exceptions.ValidationError: [''Значение "TRUE" должно быть либо True, либо False''].
Я пытаюсь загрузить данные в django ORM скриптом, для которого я написал следующее
for index, row in df.iterrows():
allocated = row['is_allocated']
delivery_required_on = row['delivery_required_on']
linked = row['linked']
raised_by = row['raised_by']
raised_for = Company.objects.get(pk=row['raised_for']) ### double check
rejected = row['is_rejected']
reason = row['reason']
remarks = row['remarks']
created = row['created_at']
owner = User.objects.get(pk=row['New owner'])
j = literal_eval(row['flows'])
flows = []
mobj = MaterialRequest.objects.create(owner=owner, is_allocated=allocated,
delivery_required_on=delivery_required_on, linked=linked,
raised_by=raised_by, raised_for=raised_for, is_rejected=rejected,
reason=reason, remarks=remarks, created=created)
Он работает нормально, когда данные выглядят примерно следующим образом:

Но как только is_allocated достигает False, появляется следующая ошибка:

django.core.exceptions.ValidationError: [''Значение "TRUE" должно быть либо True или False']
.
Я не могу найти что-то связанное с этим
Похоже, что свойство is_allocated вашей модели является булевым. Поэтому вы должны присвоить ему булево значение. Но значения ваших столбцов в кадре данных являются строками TRUE и FALSE.
заменяя эту строку
allocated = row['is_allocated']
с
allocated = (row['is_allocated'] == 'TRUE')
может помочь.
если у вас есть None, отличные от True и False значения, учтите это тоже.
Это происходит потому, что вы пытаетесь хранить строку в булевом поле. Одно из решений - изменить тип строки на boolean. Возможно, наличие в вашем коде функции, подобной следующей, решит вашу проблему:
def to_boolean(raw_value: str) -> bool:
if not isinstance(raw_value, str):
raw_value = str(raw_value)
raw_value = raw_value.strip()
return {'true': True, 'false': False}.get(raw_value.lower(), False)
и затем используйте его в вашем цикле, как (где вы думаете, что тип вашего поля является булевым):
for index, row in df.iterrows():
allocated = to_boolean(row['is_allocated'])
delivery_required_on = row['delivery_required_on']
linked = row['linked']
raised_by = row['raised_by']
raised_for = Company.objects.get(pk=row['raised_for']) ### double check
rejected = to_boolean(row['is_rejected'])
reason = row['reason']
remarks = row['remarks']
created = row['created_at']
owner = User.objects.get(pk=row['New owner'])
j = literal_eval(row['flows'])
flows = []
mobj = MaterialRequest.objects.create(owner=owner, is_allocated=allocated,
delivery_required_on=delivery_required_on, linked=linked,
raised_by=raised_by, raised_for=raised_for, is_rejected=rejected,
reason=reason, remarks=remarks, created=created)