Как получить объекты bulk_create, чтобы назначить их для Foreign_key другого объекта? - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь найти лучший способ массового создания двух разных типов объектов (Заказы и Клиенты). Каждый Заказ привязан к Заказчику с помощью внешнего ключа.

Объекты определяются следующим образом:

class Customer(models.Model):
    unique_cust_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    client_id = models.ForeignKey(Client, on_delete=models.CASCADE)
    customer_id = models.CharField(max_length=30)
    cohort = models.DateField('Customer cohort')

    def __str__(self):
        return self.customer_id

class Order(models.Model):
    unique_ord_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    order_id = models.CharField(max_length=30)
    client_id = models.ForeignKey(Client, on_delete=models.CASCADE)
    customer_id = models.ForeignKey(Customer, on_delete=models.CASCADE)
    amount = models.IntegerField(default=0)
    timestamp = models.DateTimeField('Order creation date')
    upload_tag = models.CharField(max_length = 100, default = 'manual_creation')

    def __str__(self):
        return self.order_id

Поскольку мой первичный ключ генерируется django как uuid, а не как автополе мне может показаться, что нет проблем с его извлечением.

Если первичный ключ создается при выполнении действия bulk_create, а затем генерируется uuid, как я могу получить сами объекты без первичного ключа? (если я сделаю запрос по любому другому полю, он может вернуть более одного экземпляра, поскольку они не являются уникальными значениями в таблице).

Я хотел бы:

df1 = pandas.DataFrame() # All Customer information but uuid generated by django on storage

# Create Customer objects
Customer.objects.bulk_create(
    Customer(**vals) for vals in df1.to_dict('records')
)
# Retrieve Customer objects created with df1 and give them to df2
????

df2 = pandas.DataFrame() # All Order information including Customer objects for the ForeignKey

# Create Order objects
Order.objects.bulk_create(
    Order(**vals) for vals in df2.to_dict('records')
)

Спасибо вы!

...