Hi Dvenun, Bc of Django implement accord to python, of cause child inherit from parent existence.
https://docs.python.org/3.7/library/functions.html#id On Sat, Nov 30, 2019, 13:30 Dvenum <[email protected]> wrote: > Interest idea and it works, but not necessary: > company = Company() > #company.id is None > companies.append(company) > Company.objects.bulk_create(companies) > #company.id is 1 > > Instead to ask pk from database, it can be used from > company_value.company.id. Django save pk value to internal meta > (models/base.py) and does not update it. This works too: > value.company = value.company # pk updated > > I want to ask, each child object should be created only when parent is > saved to db? Maybe django has something to cover this case? > > > On Sat, Nov 30, 2019 at 7:52 AM Charles Lee <[email protected]> > wrote: > >> I have an idea. >> >> 1. `bulk_create` all companies. >> 2. `Filter`(SELECT) all `Company` and make it dictionary for >> retrieving company fast. >> 3. >> 1. company_dict = { >> ’Name’: ‘pk’, >> ... >> } >> 4. Create a list of `CompanyValue` with company name and >> company_dict. >> 5. `bulk_create` the list. >> >> >> I'm not sure if it will work because I haven't implemented it, but I hope >> it helps. >> >> 2019년 11월 29일 금요일 오후 9시 42분 0초 UTC+9, Maxim Bulatov 님의 말: >>> >>> Hello, >>> >>> I have lot of lists like follow: >>> (Name1): (V1, V2, V3, V4, ..) >>> >>> And I use many threads to create many db objects: >>> company = Company(Name) >>> for x in vector: >>> v = CompanyValue(company=company, value=x) >>> values.append(v) >>> >>> class CompanyValue(models.Model): >>> company = models.ForeignKey('Company', on_delete=models.CASCADE) >>> value = FloatField >>> >>> This pool of threads return all lists, what I combine, filter and want >>> put to database in one bulk_create call. >>> Suddenly, I found, company.id is not ready to be linked in >>> CompanyValue, follow code does not works: >>> Company.objects.bulk_create(companies) >>> CompanyValue.objects.bulk_create(values) # value.company_id is >>> null here >>> >>> No way to save objects in my threads, because I need to filter objects >>> and can do it only when all of them are collected. Also, it has performance >>> issues 100k+ of requests is slowly enough. I have two ways to resolve: >>> 1. I can make intermediate class or tuple and create CompanyValue >>> objects only when companies is saved to db. Hard to support, hard to >>> filter, not so clean. >>> 2. I can use dirty hack to update _id field: >>> for v in values: >>> v.company = v.company >>> >>> Can you advice more ways for me? It seems, I don't know something from >>> django features to make it elegant. >>> I see 11 years old issue here ( >>> https://code.djangoproject.com/ticket/9553 >>> <https://code.djangoproject.com/ticket/9553#no1>) and it marked as >>> intended behaviour. >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/af2a0f27-7234-4210-8627-1ad8982da805%40googlegroups.com >> <https://groups.google.com/d/msgid/django-users/af2a0f27-7234-4210-8627-1ad8982da805%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > dvenum > [email protected] > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CAHBRYSd1MC5mL3oWTfzqc%2BXXcWxVnDqLpJ5HsEGk2GHFd917eQ%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CAHBRYSd1MC5mL3oWTfzqc%2BXXcWxVnDqLpJ5HsEGk2GHFd917eQ%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAP5HUWqW7gZVR1u6-%2BAkMhB5dZeRHiXzLrSQvmiL7O3diT9OfA%40mail.gmail.com.

