Eslatma - Berdiyev B. Mirzayev I. Ma’lumotlar bazasini boshqarish tizimlari

Eslatma:Eslatma. Keyingi bo'limda modellar qanday aniqlanishi va ishlatilishini tushuntirib beradigan asosiy misol keltirilgan. Uni o'qiganingizda, yuqoridagi diagrammada har bir modelni qanday qurishimiz haqida o'ylab ko'ring.
Model tushinchasi
Ushbu bo'limda model qanday aniqlanganligi va ba'zi muhim maydonlar va maydon argumentlari haqida qisqacha ma'lumot berilgan.
Model sinflaringizni aniqlaganingizdan so'ng, siz ulardan yozuvlarni yaratish, yangilash yoki o'chirish va barcha yozuvlarni yoki yozuvlarning alohida kichik to'plamlarini olish uchun so'rovlarni bajarish uchun foydalanishingiz mumkin. Biz sizga qisqacha sharh bilan o'z fikrlarimizni bayon qilib, buni qo’llanmada qanday qilishni ko'rsatamiz.
Maydon va yozuv
Yozuvni yaratish uchun siz modelning namunasini aniqlab, keyin save () usulini chaqirishingiz mumkin.
# Model construktori yordamida yangi yozuv hosil qilamiz.
a_record = MyModelName(my_field_name="Maydon nomi#1")
# Ob’ektni bazada saqlab qo’yamiz.
a_record.save()
Eslatma: Eslatma. Agar siz primary_key sifatida biron bir maydonni ko'rsatmagan bo'lsangiz, yangi yozuv avtomatik ravishda maydon nomi identifikatori bilan beriladi. Yuqoridagi yozuvni saqlaganingizdan so'ng siz ushbu maydonni so'rashingiz mumkin va u 1 qiymatiga ega bo'ladi.
Siz nuqta sintaksisidan foydalangan holda ushbu yangi yozuvdagi maydonlarga kirishingiz va qiymatlarni o'zgartirishingiz mumkin. saveO'zgartirilgan qiymatlarni ma'lumotlar bazasida saqlash uchun save () ni chaqirishingiz kerak.
# Python sifatlari yordamida Access model maydon qiymatlari.
print(a_record.id) #should return 1 for the first record.
print(a_record.my_field_name) # should print 'Instance #1'
# Maydonlarni o'zgartirib, keyin save() orqali yozuvni o'zgartiring
a_record.my_field_name="New Instance Name"
a_record.save()
Quyidagi genre model kodidan nusxa olingGenreva uni faylingizning pastki qismiga joylashtiringmodels.pymodels.py. ushbu model kitoblar toifasi haqidagi ma'lumotlarni saqlash uchun ishlatiladi - masalan, badiiy yoki hujjatli, roman yoki harbiy-tarixiy va boshqalar. yuqorida aytib o'tilganidek, biz janrni erkin matn yoki ro'yxat sifatida emas, balki model sifatida yaratdik mumkin bo'lgan qiymatlarni kodlangan emas, balki ma'lumotlar bazasi orqali boshqarish uchun tanlov.
class Genre(models.Model):
"""
Kitob janrini ifodalovchi Model(masalan, ilmiy fantastika, fantastika).
"""
name = models.CharField(max_length=200
def __str__(self):
"""
Model ob'ektini vakili uchun String (Admin sayt va hokazo.)
"""
return self.name
Modelda bitta CharFieldfield (ism) mavjud bo'lib, u janrni tavsiflash uchun ishlatiladi (u 200 ta belgi bilan cheklangan va ba'zi help_text-ga ega. Model oxirida biz__str_ma'lum bir yozuv bilan belgilangan janr nomini qaytaradigan __str__ () usulini e'lonqilamiz. Verbose name aniqlanmagan, shuning uchun maydon shakllarda Name deb nomlanadi.
Keyin bookinstance modelini BookInstance(quyida ko'rsatilgan) boshqa modellarga nusxalash. BookInstance-bu kimdir qarz olishi mumkin bo'lgan kitobning ma'lum bir nusxasi bo'lib, uning nusxasi mavjudmi yoki qaysi kuni kutilayotgani, "bosma" yoki versiya tafsilotlari va kutubxonadagi noyob kitob identifikatori haqidagi ma'lumotlarni o'z ichiga oladi. Endi ba'zi maydonlar va usullar tanish bo'ladi. Model foydalanadi
Bog'langan kitobni aniqlash uchun ForeignKey (har bir kitobda ko'plab nusxalar bo'lishi mumkin, ammo nusxada faqat bitta kitob bo'lishi mumkin).
CharField, kitob haqidagi ma'lumotlarni (maxsus nashr) taqdim etish uchun.
import uuid # Noyob kitob nusxalari uchun talab qilinadi
class BookInstance(models.Model):
"""
Kitobning ma'lum bir nusxasini ifodalovchi Model (ya'ni kutubxonadan qarz olish mumkin).
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Unique ID for this particular book across whole library")
book = models.ForeignKey('Book', on_delete=models.SET_NULL, null=True)
imprint = models.CharField(max_length=200)
due_back = models.DateField(null=True, blank=True)
LOAN_STATUS = (
('m', 'Maintenance'),
('o', 'On loan'),
('a', 'Available'),
('r', 'Reserved'),
)
status = models.CharField(max_length=1, choices=LOAN_STATUS, blank=True, default='m', help_text='Book availability')
class Meta:
ordering = ["due_back"]
def __str__(self):
"""
Model ob'ektini ifodalash uchun satr
"""
return '%s (%s)' % (self.id,self.book.title)
Biz qo'shimcha ravishda bir nechta yangi maydon turlarini e'lon qilamiz:
Uuidfield id ushbu model uchun primary_key sifatida o'rnatish uchun id maydoni uchun ishlatiladi primary_key. Ushbu turdagi maydon har bir misol uchun global noyob qiymatni ta'kidlaydi (kutubxonada topishingiz mumkin bo'lgan har bir kitob uchun bittadan).
DateField due_back ma'lumotlari uchun ishlatiladi due_back(qarz olish yoki texnik xizmat ko'rsatishdan keyin kitob paydo bo'lishi kutilmoqda). Bu qiymat bo'sh yoki bo'sh bo'lishi mumkin (kitob mavjud bo'lganda kerak). Model metadata (Class Meta) ushbu maydondan so'rovga qaytganlarida yozuvlarni tartibga solish uchun foydalanadi.
status CharFieldbo'lib, u choice/selection ro'yxatini belgilaydi. Ko'rib turganingizdek, biz kalit-qiymat juftliklari katakchalarini o'z ichiga olgan katakchani aniqlaymiz va uni tanlov argumentiga o'tkazamiz. Kalit/qiymat juftligidagi qiymat - bu foydalanuvchi tanlashi mumkin bo'lgan ko'rsatilgan qiymat, kalitlar esa variant tanlansa, aslida saqlanadigan qiymatlardir. Shuningdek, biz "m" (texnik xizmat ko'rsatish) standartini o'rnatdik, chunki kitoblar javonlarda saqlanishidan oldin dastlab mavjud bo'lmagan holda yaratiladi.
__Str _ _ () modeli BookInstance ob'ektini BookInstanceuning noyob identifikatori va unga tegishli kitob sarlavhasi kombinatsiyasidan foydalangan holda ifodalaydi.
|