• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Django zapisuje model do bazydanych podwójnie

Object Storage Arubacloud
0 głosów
72 wizyt
pytanie zadane 20 maja 2019 w Python przez gintoki996 Nowicjusz (170 p.)

Mam kod zapisujący z google books api.

            for book_data in data['items']:
                volume_info = book_data['volumeInfo']
                title = volume_info['title']
                genres = volume_info.get('categories')
                authors = volume_info.get('authors')
                description = volume_info.get('description')
                if not Books.objects.filter(title=title).exists():
                    book = Books.objects.create(title=title, description=description)

                    # Does authors exists in database?
                    existing_authors = Authors.objects.filter(author_name__in=authors)
                    existing_authors_names = {authors.author_name for authors in existing_authors}

                    # Create a list of missing authors
                    missing_authors = [
                        Authors(author_name=author_name)
                        for author_name in authors
                        if author_name not in existing_authors_names
                    ]
                    print(missing_authors)
                    # Creating author before adding it to relation
                    if missing_authors:
                        missing_authors = Authors.objects.bulk_create(missing_authors)
                        for m in missing_authors:
                            m.save()

                    # Adding authors to book relation
                    book.authors.add(*existing_authors, *missing_authors)

                    # Does genres exists in database?
                    existing_genres = Genres.objects.filter(genres__in=genres)
                    existing_genres_name = {genres.genres for genres in existing_genres}
                    # Create a list of missing genres
                    missing_genres = [
                        Genres(genres=genres)
                        for genres in genres
                        if genres not in existing_genres_name
                    ]
                    # Creating genre before adding it to relation
                    if missing_genres:
                        missing_genres = Genres.objects.bulk_create(missing_genres)
                        for m in missing_genres:
                            m.save()
                    # Adding genres to book relation
                    book.genres.add(*existing_genres, *missing_genres)

Moim problemem jest to że zapisuje on po 2 razy tego samego autora i genre( np. J.R.R. Tolkien, Fiction) ale tylko jeden ma relację z modelem Books. Jak zrobić żeby zapisywało tylko raz Autora i Genre

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 265 wizyt
pytanie zadane 3 sierpnia 2019 w Python przez reaktywny Nałogowiec (41,050 p.)
0 głosów
0 odpowiedzi 210 wizyt
pytanie zadane 21 kwietnia 2023 w Python przez tonn204 Mądrala (7,440 p.)
0 głosów
1 odpowiedź 128 wizyt

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...