Как связать модель с внешним ключом в функции, которая загружает CSV-файл в Django? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть веб-приложение django, где я хочу, чтобы пользователи загружали свои данные в виде csv. Я создал функцию и страницу, где пользователь загружает CSV, и я добавил пользователя к модели, но я хочу, чтобы этот пользователь был внешним ключом для каждого из файлов. Из того, что я вижу, данные вводятся в базу данных просто отлично, но я не думаю, что они правильно связаны с внешним ключом, потому что при анализе базы данных он говорит, что внешние ключи не подключены, и просто вводится значение с никакого отношения не имеет.

Вот моя функция:

def upload_batch(request):
    template_name = 'classroom/teachers/upload.html'
    prompt = {'order':'Order of csv should be first_name, last_name, email, ip_address, message'}
    if request.method == "GET":
        return render(request,template_name,prompt)

    csv_file = request.FILES['file']
    data_set = csv_file.read().decode('UTF-8')
    io_string = io.StringIO(data_set)
    next(io_string)


    uploaded_by = request.user


    for column in csv.reader(io_string,delimiter=',',quotechar='|'):
        _, created = ItemBatch.objects.update_or_create(
            name = column[0],
            pid = column[1],
            quantity = column[2],
            length = column[3],
            width = column[4],
            height = column[5],
            volume = column[6],
            weight = column[7],
            uploaded_by = uploaded_by
        )


    context = {}
    return render(request,template_name,context)

Вот моя модель:

# item upload
class ItemBatch(models.Model):

    # uploaded_by = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='uploaded_by')

    uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='uploaded_by')

    name = models.CharField(max_length=30)
    pid = models.CharField(max_length=30)
    quantity = models.CharField(max_length=30)
    length = models.CharField(max_length=100, blank=True)
    width = models.CharField(max_length=100, blank=True)
    height = models.CharField(max_length=100, blank=True)
    volume = models.CharField(max_length=100, blank=True)
    weight = models.CharField(max_length=100, blank=True)

    def __str__ (self):
        return self.name

ОБНОВЛЕНИЕ: Вот скриншот модели в моей базе данных. Как вы можете видеть, uploaded_by не отображается как внешний ключ, как это показано в другой рабочей модели.

Моя модель в базе данных: 1

Вкладка внешнего ключа пуста. 1

Моя другая рабочая модель с FK. 3

1 Ответ

0 голосов
/ 29 апреля 2019

Код и модель выглядит отлично.Вы делали какие-то изменения в модели в прошлом (и запускали makemigrations, migrate)?Согласно вашим скриншотам, для этой таблицы нет ограничений по внешнему ключу, что странно, так как кажется, что она заполняется правильно.Вы обновили / синхронизировали схему в инструменте?

...