Найти - Пользователи
Полная версия: Проблема при парсинге данных в PostgresQL на Django models
Начало » Python для экспертов » Проблема при парсинге данных в PostgresQL на Django models
1
alvareson
Доброго времени суток, столкнулся с такой проблемой:

В Django models есть такая вот модель:

 DEFAULT_AUTOMOBILE_ID = 1
class Face(models.Model):
    face_id = models.AutoField(primary_key=True)
    gender = models.CharField(max_length=10)
    age = models.PositiveIntegerField(default=1)
    car = models.ForeignKey(Automobile, on_delete=True, default = DEFAULT_AUTOMOBILE_ID)
    id_of_check = models.CharField(default='None', max_length=10)
    def __str__(self):
        return self.gender + " " + str(self.age)

Во views.py имеется функция import_db, которая парсит данные из csv файла data.csv, создавая инстансы модели Face

 def import_db(request):
    f = open('/home/user/main_django_folder/app_folder/data.csv', 'r')
    for line in f:
        line =  line.split(',')
        tmp = Face.objects.create()
        tmp.face_id = line[0]
        tmp.age = line[1]
        tmp.gender = line[2]
        tmp.car = Automobile.objects.get(pk = (line[3]))
        tmp.id_of_check = line[4]
        tmp.save()
    f.close()
    return render(request, 'home.html', {})

Файл csv выглядит следующим образом:
1,26,M,1,10,
2,27,M,4,11,
3,26,M,3,12,
4,27,M,4,13,
5,27,M,5,14,
6,27,M,3,15,
7,27,M,1,16,
8,27,M,4,17,
9,26,M,4,18,
10,26,M,5,19,

При выполнении функции import_db в базе данных происходит такая вот ситуация:
Открыть изображение

То есть вместе с нужными объектами моделей создаются ещё x2 объекты у которых выставляются дефолтные значения И ещё к тому же я удаляю их постоянно, пробую снова, они опять появляются, НО уже с обновленными айдишниками, которые где-то видимо считаются.

Вопрос мой заключается в том, как избавиться от этих дублирующихся инстансов.
FishHook
alvareson
tmp = Face.objects.create()
этот метод создаст запись в БД с дефолтными значениями, делайте так

 tmp = Face.objects.create(face_id = line[0],
age = line[1],
gender = line[2],
car = Automobile.objects.get(pk = (line[3])),
id_of_check = line[4]
)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB