Моя цель - создать пользовательскую функцию создания, которая может создавать хэш в формате sha256, но я продолжаю сталкиваться с проблемами в разных методах, которые я пробую. В настоящее время, если я запускаю свое приложение, оно говорит следующее: AttributeError в / sped_create / FieldFile объект не имеет атрибута «закодировать».
Я смутно понимаю, что вызывает проблему здесь. Но я не знаю, как это исправить. Даже после исследования различных методов я не нашел ничего, что соответствовало бы моим потребностям. Вот код, который у меня есть:
models.py
def hash_generator(file_bearer):
integrity_hash = hashlib.sha256(file_bearer.encode('utf-8')).hexdigest()
return integrity_hash
class Sped (models.Model):
json_file = models.FileField(upload_to='json_sped')
# sped_file = models.FileField()
integrity_hash = models.CharField(max_length=256, blank=True, null=True)
# line_counter = models.CharField(max_length= 15000000)
created_at = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
file_bearer = self.json_file
self.integrity_hash = hash_generator(file_bearer)
super(Sped, self).save(*args, **kwargs)
(отступ верен, но по какой-то причине фрагмент кода здесь выглядит вот так)
views.py
def sped_create(request):
if request.method == 'POST':
form = SpedForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect(sped_list)
else:
form = SpedForm(request.POST, request.FILES, None)
return render(request, 'sped_form.html', {'form': form})
forms.py
class SpedForm(ModelForm):
class Meta:
model = Sped
fields = ['json_file']
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
sped = Sped.objects.all()
context['sped'] = sped
return context