Подскажите, пожалуйста, как поместить данные Excel в несколько столбцов модели
Здравствуйте~ Я изучаю использование django, и я пытаюсь получить помощь, потому что я застрял, и я практикую загрузку файлов Excel в качестве материалов для хранения, и я могу увидеть много примеров данных Excel в Google, но проблема в том, что я не знаю, как делать различные модели. Текущие модели включают модели вопросов и модели выборщиков, которые ссылаются на модели вопросов и выборщиков как на ForeignKey. Кроме того, данные всех моделей в настоящее время пусты, а значение данных Excel становится первым значением. Я знаю, что это трудно понять. Ключ_по_умолчанию (идентификатор) вопроса - Question_text. Ключ_по_умолчанию (идентификатор) выбора - Choice_text. Первичным ключом избирателя является имя_избирателя. Таким образом, Question_text и Potters_nm в настоящее время в Excel являются идентификаторами и дублирующими данными. Я задаюсь этим вопросом уже несколько дней и несколько раз читал официальные документы Jango Excel и Jango export, но ничего путного не получается. Если у вас есть подобный опыт, пожалуйста, ответьте мне.
class Question(models.Model):
question_text = models.CharField(primary_key=True,max_length=200)
pub_date = models.DateTimeField('date published')
slug = models.CharField(max_length=10, unique=True,
default="question")
def __str__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
voters_name = models.ForeignKey('Voters', on_delete=models.DO_NOTHING)
choice_text = models.CharField(primary_key=True, max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
class Voters(models.Model):
voters_name = models.CharField(primary_key=True,max_length=100)
voters_number = models.IntegerField(null=True)
def __str__(self):
return self.voters_name
является csv
Question_text,Publish Date,Question,Voters_Nm,voters_nm,Choice,Noise,Votes
What is your favourite programming language?,2004-01-15,language,kim,010-1234-5678,Java,1,1
What is your favourite programming language?,2004-01-15,language,hong,010-3333-1111,C++,1,1
What is your favourite programming language?,2004-01-15,language,jung,010-7777-1111,C,1,1
What is your favourite IDE?,2029-01-15,ide,kim,010-1234-5678,Eclipse,1,1
What is your favourite IDE?,2029-01-15,ide,houg,010-3333-1111,Visual Studio,1,1
What is your favourite IDE?,2029-01-15,ide,jung,010-7777-1111,PyCharm,1,1
What is your favourite IDE?,2029-01-15,ide,min,010-0000-1234,IntelliJ,1,1
это git sample https://github.com/pointsiga1/django_sample.git
excel img введите описание изображения здесь
Используя django-import-export
, вы можете сослаться на ресурс FK, например question__slug
.
Прежде всего, создайте ресурс, который сопоставляет поля импорта с вашей моделью.
class ChoiceResource(resources.ModelResource):
question_text = fields.Field(
attribute="question__question_text",
column_name="question_text",
widget=widgets.CharWidget(),
)
pub_date = fields.Field(
attribute="question__pub_date",
column_name="Publish Date",
widget=widgets.DateTimeWidget(),
)
# Add remaining fields
class Meta:
model = Choice
Просмотрите widgets и убедитесь, что вы установили правильный тип данных для вашего типа данных импорта.
Обратите внимание, что если вам нужно перейти по ссылке FK, вы можете сделать это с помощью:
# note you have two columns with this name - you may need to fix that
voters_name = fields.Field(
attribute="Voters__voters_name",
column_name="Voters_Nm",
widget=widgets.CharWidget(),
)
Далее следует зарегистрировать ресурс на сайте Django's Admin . Это облегчит тестирование. Вы можете выбрать импортируемый XLS-файл и выполнить импорт напрямую. Если вы все настроили правильно, все должно работать хорошо.
Я настоятельно рекомендую установить отладчик, чтобы вы могли пошагово выполнять процесс импорта. Это значительно облегчит выявление недостатков.
Я рекомендую установить
django-import-export
пример приложения, чтобы вы могли запустить его и посмотреть, как все должно сочетаться.
Спасибо за ответ. В настоящее время я использую Pandas, чтобы приблизиться к ответу. Но есть одна проблема. Мы получили нужные данные, обработанные с помощью Pandas, и теперь собираемся поместить их в базу данных. Я хочу использовать pyexcel's save_to_database, чтобы поместить их в базу данных, но возникает ошибка, независимо от того, является ли проблемой формат файла или метод использования. Вы знаете как? Причина, по которой я хочу использовать save_to_database, заключается в том, что это очень просто.
def question_data(data):
data = data.drop_duplicates(['Question_text'])
request.FILES[data].save_to_database(
models=Question,
mapdicts=[
{"Question_text": "question_text", 'Publish Date':'pud_data'},
],
)
ошибка
TypeError: unhashable type: 'DataFrame'
и другой способ
def question_data(data):
data = data.drop_duplicates(['Question_text'])
is_data = pd.ExcelWriter('test.xlsx')
data.to_excel(is_data,'sheet1')
is_data.save()
request.FILES[is_data].save_to_database(
models=Question,
mapdicts=[
{"Question_text": "question_text", 'Publish Date':'pud_data'},
],
)
и ошибка
django.utils.datastructures.MultiValueDictKeyError: <pandas.io.excel._xlsxwriter.XlsxWriter object at 0x000001C19976F7F0>