ID объекта Django ORM - PullRequest
       10

ID объекта Django ORM

0 голосов
/ 04 мая 2018

Я предполагаю, что идентификаторы объекта создаются автоматически. Хотя я сталкиваюсь с ошибкой Attribute, в которой говорится, что «объект list не имеет атрибута id»

Ниже мой кодовый модуль:

client = Client.objects.bulk_create([Client(name='WaltDisnep', created_at=timezone.now(),
                                                    updated_at=timezone.now()),
                                             Client(name='Google', created_at=timezone.now(),
                                                    updated_at=timezone.now()),
                                             Client(name='JetAirways', created_at=timezone.now(),
                                                    updated_at=timezone.now())])
building = Building.objects.create(description='TestBuilding',
                                           is_active=1, client_id=client.id,
                                country_code='NL')

Ответы [ 2 ]

0 голосов
/ 10 мая 2018
names = ['WaltDisney', 'Google', 'JetAirways']
now = timezone.now()
clients = Client.objects.bulk_create(
             [Client(name=name, created_at=now, updated_at=now) for name in names]
         )

buildings = [
    c.building_set.create(
        description='TestBuilding',
        is_active=1,
        country_code='NL',
    ) for c in clients
]
0 голосов
/ 04 мая 2018

Если вы хотите создать Building объекты для каждого из Client объектов, то вы можете сделать это:

clients = Client.objects.bulk_create([
    Client(name='WaltDisney', created_at=timezone.now(), updated_at=timezone.now()),
    Client(name='Google', created_at=timezone.now(), updated_at=timezone.now()),
    Client(name='JetAirways', created_at=timezone.now(), updated_at=timezone.now())
])

# Now we have a list of clients we can iterate over.
buildings = []
for client in clients:
    # Let's make the description specific per client.
    description = '{} Building'.format(client.name)
    building = Building.objects.create(
        description=description,
        is_active=True,  # For truthiness use booleans not the set {0, 1}.
        client_id=client.id,
        country_code='NL'
    )
    buildings.append(building)

Но учтите, что если вы этого еще не сделали, было бы предпочтительнее связать эти две модели с внешним ключом, а не вручную записывать client_id в случаях Building, если это на самом деле то, что ты здесь делаешь. Мне нужно будет просмотреть ваш файл models.py, чтобы понять, что вы на самом деле делаете, чтобы дать вам дополнительные советы по этому поводу.

...