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

question-closed Django jak działają relacje

Object Storage Arubacloud
0 głosów
811 wizyt
pytanie zadane 2 listopada 2018 w Python przez niezalogowany
zamknięte 2 listopada 2018

witam. czy mógłby ktoś objaśnić mi jak działają połączenia? napisałem taki kod ,ale wyskakują błędy 

from django.db import models

class users(models.Model):
    first_name = models.CharField(max_length = 50)
    surname = models.CharField(max_length = 50)

    def published(self):
        self.save()
    
class libary(models.Model):
    NameOfBook = models.CharField(max_length = 50)
    Author = models.CharField(max_length = 50)

    def published(self):
        self.save()

class loan(models.Model):
    first_name = models.ForeignKey(users, on_delete = models.CASCADE)
    surname = models.ForeignKey(users, on_delete = models.CASCADE)
    NameOfBook = models.ForeignKey(libary, on_delete = models.CASCADE)
    Author = models.ForeignKey(libary, on_delete = models.CASCADE)

    def published(self):
        self.save()

 

komentarz zamknięcia: problem rozwiązany
komentarz 2 listopada 2018 przez adrian17 Ekspert (344,860 p.)

problem rozwiązany

Jak?

komentarz 2 listopada 2018 przez niezalogowany
from django.db import models
from django.utils import timezone

class users(models.Model):
    IdOfUser = models.AutoField(primary_key = True)
    first_name = models.CharField(max_length = 50)
    surname = models.CharField(max_length = 50)

    def published(self):
        self.save()

    def __str__(self):
        return self.first_name + "  " + self.surname
    
class libary(models.Model):
    IdOfBook = models.AutoField(primary_key = True)
    NameOfBook = models.CharField(max_length = 50)
    Author = models.CharField(max_length = 50)

    def published(self):
        self.save()

    def __str__(self):
        return self.NameOfBook +"   "+ self.Author

class loan(models.Model):
    IdOfUser= models.ForeignKey(users, on_delete = models.CASCADE)
    IdOfBook = models.ForeignKey(libary, on_delete = models.CASCADE)

    def published(self):
        self.save()


    

nie chce mi się tłumaczyć ,ale obejrzałem dwa filmiki M.Z i przeczytałe dokładnie dokumentacje Django

komentarz 2 listopada 2018 przez adrian17 Ekspert (344,860 p.)

@Marcins321,

Lepiej... z tym, że

IdOfBook = models.AutoField(primary_key = True)

To jest niepotrzebne; Django automatycznie dodaje primary key.

IdOfUser= models.ForeignKey

To nie jest ID; najelepiej nazwać to "user". Wtedy czytanie pól staje się czytelne, np `loan.user.surname`, `loan.book.author`.

class libary

Book.

    def published(self):
        self.save()

Nie rozumiem, po co to; wygląda na kompletnie niepotrzebne :)

komentarz 2 listopada 2018 przez niezalogowany
to tak

1. Wiem że to django generuje klucze automatycznie , ale to tylko taki test czy klucz generowany automatycznie różni się od tego generowanego ręcznie ;)(wiesz o co mi chodzi? prawda?) :)

2.Class Libary ponieważ to nie jest jedna książka tylko cała biblioteka ;)

3. otóż to jest potrzebne http://prntscr.com/ldn6xd

ps.wiem że nie powinienem dodawać tam -ed ponieważ to jest czas teraźniejszy a nie przeszły ,ale tak to jest jak coś się pisze na szybko ;)
komentarz 2 listopada 2018 przez niezalogowany

@adrian17, Wiesz co możesz mi pomóc ponieważ gdy usunąłem 

IdOfBook = models.AutoField(primary_key = True)

to wyskakuje mi taki błąd

http://prntscr.com/ldnj72

komentarz 2 listopada 2018 przez adrian17 Ekspert (344,860 p.)

Na oko powinno działać... może to przez jakieś pośrednie migracje? Gdyby od początku był model postaci

class Book(models.Model):
    name = models.CharField(max_length=50)

To `book.id` by na pewno działało.

komentarz 2 listopada 2018 przez niezalogowany

kod teraz wygląda tak

from django.db import models

class users(models.Model):
    first_name = models.CharField(max_length = 50)
    surname = models.CharField(max_length = 50)

    def publish(self):
        self.save()

    def __str__(self):
        return self.first_name + "  "+ self.surname
    
class libary(models.Model):
    NameOfBook = models.CharField(max_length = 50)
    Author = models.CharField(max_length = 50)

    def publish(self):
        self.save()

    def __str__(self):
        return self.NameOfBook +"  "+ self.Author

class loan(models.Model):
    User = models.ForeignKey(users, on_delete = models.CASCADE)
    Book = models.ForeignKey(libary, on_delete = models.CASCADE)

    def publish(self):
        self.save()


    

gdy wpisuje py manage.py migrate to wyskakuje mi takie coś 

Running migrations:
  No migrations to apply.

jedynie co może być źle to admins.py 

from django.contrib import admin
from .models import users, libary, loan

admin.site.register(users)
admin.site.register(libary)
admin.site.register(loan)

 

komentarz 2 listopada 2018 przez adrian17 Ekspert (344,860 p.)
Na oko jest OK. Tyko pamiętaj też o `makemigrations`.

(i wciąż nie widzę sensu istnienia `publish()`)
komentarz 2 listopada 2018 przez niezalogowany
wygląda ok ,ale nie działa :(

Podobne pytania

0 głosów
1 odpowiedź 149 wizyt
pytanie zadane 1 czerwca 2019 w Python przez ctx2 Początkujący (410 p.)
0 głosów
2 odpowiedzi 235 wizyt
0 głosów
1 odpowiedź 307 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 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!

...