Saya memiliki kunci asing dan saya menggunakan bidang related_name seperti:

class Pizza(models.Model):
   ...
   restaurant = models.ForeignKey('Restaurant', related_name='pizzas_offered')
   active = models.BooleanField(...)
   ...

Contoh dari tampilan:

my_restaurant = get_object_or_404(Restaurant, pk=id)

Dalam template apa pun saya dapat menjalankan sesuatu seperti my_restaurant.pizzas_offered.all untuk mendapatkan semua pizza milik restoran tertentu. Namun, saya hanya ingin pizza yang aktif (active=True). Apakah ada cara untuk mengambil subset ini di templat, tanpa harus melewatkan variabel terpisah dalam tampilan? Harap dicatat bahwa saya selalu hanya ingin menampilkan pizza yang aktif saja, jadi jika saya harus membuat perubahan pada model untuk mewujudkannya, tidak apa-apa juga.

CATATAN: dalam tampilan saya cukup meneruskan my_restaurant.pizzas_offered.filter(active=True) tetapi mengembalikan kesalahan saat saya menggunakannya di template:

{% for details in my_restaurant.pizzas_offered.filter(active=True) %}
  {{ details.name }}
{% endfor %}

Ini mengembalikan kesalahan ini: Tidak dapat menguraikan sisanya: '(active=True)'

Ada beberapa alasan mengapa saya ingin melakukan ini pada tingkat template dan tidak dalam tampilan (alasan utama: Saya sering mengulang semua catatan dalam database dan bukan hanya satu restoran, jadi saya tidak bisa hanya menanyakan satu catatan) . Jadi pertanyaan saya adalah bagaimana melakukan ini di tingkat templat.

0
user585936 19 Maret 2019, 11:29

1 menjawab

Jawaban Terbaik

Anda perlu membuat Manager untuk model Pizza Anda dan menyetel Meta.base_manager_name:

class PizzaManager(models.Manager):
    def active(self):
        return self.filter(status=True)

class Pizza(models.Model):
    ...
    objects = PizzaManager()

    class meta:
        base_manager_name = 'objects'

Sekarang Anda dapat menggunakan metode active di template Anda:

{% for details in my_restaurant.pizzas_offered.active %}
    ...
{% endfor %}

Untuk informasi lebih lanjut, Anda dapat membaca dokumentasi tentang Manajer Default dan Basis .

-1
ikkuh 19 Maret 2019, 08:41