Saya pemula di Django, mengerjakan kerangka kerja API lainnya. Saya ingin menanyakan detail tertentu kepada pengguna untuk dimasukkan ke dalam format html, seperti popularitas, nama beberapa buku.

Sebuah buku dapat termasuk dalam berbagai kategori seperti Friction, Romantic, Action. Jadi saya ingin memiliki daftar Bidang untuk kategori. Dua opsi dapat diberikan, satu meminta pengguna untuk memasukkan kategori dan menambahkan daftar di backend. Atau berikan daftar dari mana pengguna dapat memilih.

Telah mencoba kode di bawah ini di model.py

from django.db import models

class Category(models.Model):
    category = models.CharField(max_length=100)

    def __str__(self):
       return self.category


 class Books(models.Model):
     name = models.CharField(max_length=100)
     date = models.DateTimeField()
     category = models.ManyToManyField(Category)
     #category = models.ForeignKeyField(Category) #tried Foreign key Model Field also


     def __str__(self):
        return self.name

Tolong bantu saya. Apakah itu pendekatan yang benar atau harus mencoba yang lain.
Terima kasih sebelumnya.

Ini berfungsi dengan baik, Tetapi alih-alih menampilkan nilai pada panel admin, ini menunjukkan Objek Kategori di Tabel Model Buku.

[
  {
    "name": "Harry Potter",
    "date": 03-03-2014,
    "category": 6
  }
]

Dimana pada kategori 6 terdapat nilai String sebagai “Magical”

Apakah saya melewatkan sesuatu?

1
user2597209 16 Agustus 2017, 13:17

2 jawaban

Jawaban Terbaik

Ya, saya pikir pendekatan ini benar dengan ManyToManyField, karena sebuah buku dapat memiliki begitu banyak kategori dan sebuah kategori dapat memiliki begitu banyak buku.

from django.db import models

class Category(models.Model):
    category = models.CharField(max_length=100)

    def __str__(self):
       return self.category


 class Books(models.Model):
     name = models.CharField(max_length=100)
     date = models.DateTimeField()
     category = models.ManyToManyField(Category)


     def __str__(self):
        return self.name
1
JesusMurF 16 Agustus 2017, 10:24

Setiap buku hanya termasuk dalam satu kategori (atau genre), jadi yang Anda butuhkan adalah kunci asing (hubungan tidak banyak ke banyak). Model Book Anda akan terlihat seperti di bawah ini:

class Book(models.Model):
    title = models.CharField(max_length=100)
    publication_date = models.DateTimeField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

Catatan:

  • Lebih baik menggunakan publication_date atau published daripada date untuk tidak membayangi date jika Anda mengimpornya dari modul datetime misalnya.
  • Sebuah buku dicirikan oleh judulnya (jadi lebih baik untuk memanggil judul bidang pertama daripada nama)
  • on_delete=models.CASCADE berarti jika suatu kategori dihapus, semua buku terkaitnya juga akan dihapus.
0
ettanany 16 Agustus 2017, 10:37