Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menapis Pilihan ForeignKey dalam Borang Model Django Berdasarkan Syarikat Induk?

Bagaimana untuk Menapis Pilihan ForeignKey dalam Borang Model Django Berdasarkan Syarikat Induk?

Susan Sarandon
Susan Sarandonasal
2024-11-25 12:57:11936semak imbas

How to Filter ForeignKey Choices in a Django ModelForm Based on Parent Company?

Menapis Pilihan ForeignKey dalam Borang Model Django

Andaikan anda mempunyai model berikut ditakrifkan:

class Company(models.Model):
    name = ...

class Rate(models.Model):
    company = models.ForeignKey(Company)
    name = ...

class Client(models.Model):
    name = ...
    company = models.ForeignKey(Company)
    base_rate = models.ForeignKey(Rate)

Matlamat adalah untuk memastikan bahawa semasa membuat pelanggan, pilihan kadar yang tersedia adalah terhad kepada pilihan dalam induk syarikat.

Dalam fail Django 1.0 forms.py:

from models import *
from django.forms import ModelForm

class ClientForm(ModelForm):
    class Meta:
        model = Client

    def __init__(self, company_id, *args, **kwargs):
        '''Filter the rate choices to only include those for the specified company'''
        super(ClientForm, self).__init__(*args, **kwargs)
        self.fields['base_rate'].queryset = Rate.objects.filter(company_id=company_id)

Dalam views.py:

from django.shortcuts import render_to_response, get_object_or_404
from models import *
from forms import *

def addclient(request, company_id):
    the_company = get_object_or_404(Company,>

Dengan menapis QuerySet yang diberikan kepada 'rate ', pilihan yang tersedia untuk ForeignKey 'base_rate' adalah terhad kepada kadar yang sesuai dalam tempoh yang ditetapkan syarikat.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Pilihan ForeignKey dalam Borang Model Django Berdasarkan Syarikat Induk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn