Администратор Django: добавить несколько элементов из текстового поля в базу данных - PullRequest
0 голосов
/ 17 декабря 2010

Мне нужно сделать небольшое приложение, в котором используется только django-admin.

Итак, у меня есть модель с одной таблицей, которая имеет один столбец, скажем, таблицу с именем items, а имя столбца"name".

Я хочу иметь вместо одного поля char в строке - одно текстовое поле.Каждая строка этого текстового поля будет добавлена ​​как новая строка в таблицу «items».

edit: было бы замечательно иметь поле загрузки файла ... и затем вручную анализировать данные

Я даже не представляю, с чего начать.

1 Ответ

1 голос
/ 17 декабря 2010

Это очень запутанный вопрос.

У вас есть одна таблица с именем Items. Один столбец в таблице Items представляет собой текстовое поле с именем Name. Каждая строка в текстовом поле Name должна быть добавлена ​​в ту же таблицу, что и новые строки базы данных.

Зачем вам когда-нибудь иметь несколько строк в текстовом поле name, если его все равно нужно разбить на отдельные строки БД?

Одна из идей состоит в том, чтобы установить ModelAdmin, переопределить save_model, в котором вы захватываете объект, никогда не сохраняете его и вручную создаете «Предметы» при выполнении итерации по текстовому полю.

Этот пример работает

class ItemsAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        data = obj.name

        items = [x for x in data.split('\n') if x and not x.isspace()]
        for item in items:
            Items.objects.create(name=item)

Что касается поля файла ...

Поле для файла: models.FileField()

Но еще больше для этого вам нужно просто настроить один URL-адрес и представление, которое будет: "/ upload-file /", иначе у вас будет пустой FileField в каждой строке вашей БД.

Если вы действительно хотите использовать приложение администратора, переопределите шаблон add_view, добавьте собственную форму загрузки и обработайте файл отдельно

<input type="file" name="myfile"> + in django view request.FILES['myfile']

...