Как вставить значения в две разные таблицы базы данных одновременно в Django? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть две модели классов в Джанго. Я хочу вставить значения в модели одновременно, используя файл CSV.

Две модели: User и User_Stats. User_stats имеет внешний ключ от пользователя. Я хочу вставить некоторые строки из CSV-файла в User, а некоторые в User_stats. Я не уверен, как это будет сделано.

class User(models.Model):
    full_name = models.CharField('Full Name',max_length=100)
    username = models.CharField('Username',max_length=100,unique=True)
    photo = models.ImageField(upload_to = 'photos/%Y/%m/%d/',blank=True)
    email_id = models.EmailField('Email Id',blank=True)

class User_Statistics(models.Model):
    username = models.ForeignKey(User,on_delete=models.CASCADE)
    total_posts = models.PositiveIntegerField('Total Posts')
    followers = models.PositiveIntegerField('Followers')
    following = models.PositiveIntegerField('Following')
def write_to_db(file):
    with open(str(file),encoding='utf-8') as csvfile:
            csvreader = csv.reader(csvfile)
            next(csvreader,None)
            for row in csvreader:
                _,created = User.objects.get_or_create(
                    full_name = row[0],
                    username = row[1],
                    email_id = row[2],
                    external_url = row[8],
                    brands_worked_with = 
                _,stats = User_Statistics.objects.get_or_create(
                    username =User.objects.get() )

Какой запрос / функцию я должен написать в User_Statistics, чтобы обе таблицы были синхронизированы.

1 Ответ

0 голосов
/ 08 июня 2019

get_or_create() возвращает кортеж:

Возвращает кортеж (объект, созданный), где объект является извлеченным или Созданный объект и созданный является логическим, определяющим, является ли новый объект создан.

но вы, похоже, игнорируете возвращенный объект (используя _). Вместо этого вы можете захотеть использовать возвращенный объект и ссылаться на него при последующем создании User_Statistics объекта. I.e.:

user, created = User.objects.get_or_create(...)
stats, created = User_Statistics.objects.get_or_create(
    username=user,
    ...other properties...
)
...