พูดว่าฉันมีดังต่อไปนี้ในของฉันmodels.py
:
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)
คือมีหลายCompanies
แต่ละคนมีช่วงของและRates
Clients
แต่ละคนClient
ควรจะมีฐานRate
ที่ได้รับการแต่งตั้งจากผู้ปกครองไม่ได้อีกCompany's Rates
Company's Rates
เมื่อสร้างแบบฟอร์มสำหรับการเพิ่มClient
ฉันต้องการลบCompany
ตัวเลือก (เนื่องจากได้ถูกเลือกผ่านปุ่ม "เพิ่มลูกค้า" ในCompany
หน้า) และ จำกัดRate
ตัวเลือกCompany
เช่นกัน
ฉันจะไปเกี่ยวกับเรื่องนี้ใน Django 1.0 ได้อย่างไร
ปัจจุบันของฉันforms.py
ไฟล์เป็นเพียงต้นแบบในขณะนี้:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
และ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, id=company_id)
if request.POST:
form = ClientForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(the_company.get_clients_url())
else:
form = ClientForm()
return render_to_response('addclient.html', {'form': form, 'the_company':the_company})
ใน Django 0.96 ฉันสามารถแฮ็คสิ่งนี้โดยทำสิ่งต่อไปนี้ก่อนที่จะแสดงเทมเพลต:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
ดูเหมือนว่าจะมีแนวโน้ม แต่ฉันไม่รู้วิธีการส่งผ่านthe_company.id
และฉันไม่ชัดเจนว่าจะทำงานนอกอินเทอร์เฟซผู้ดูแลระบบหรือไม่
ขอบคุณ (ดูเหมือนจะเป็นคำขอขั้นพื้นฐานที่น่ารัก แต่ถ้าฉันควรออกแบบสิ่งที่ฉันเปิดให้มีการแนะนำ)