Nói rằng tôi có những điều sau đây trong 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)
Tức là có nhiều Companies, mỗi cái có một phạm vi Ratesvà Clients. Mỗi Clientnên có một cơ sở Rateđược chọn từ cha mẹ của nó Company's Rates, không phải cơ sở khác Company's Rates.
Khi tạo biểu mẫu để thêm a Client, tôi muốn xóa các Companylựa chọn (vì nó đã được chọn thông qua nút "Thêm khách hàng" trên Companytrang) và cũng giới hạn các Ratelựa chọn đó Company.
Làm thế nào để tôi đi về điều này trong Django 1.0?
forms.pyTập tin hiện tại của tôi chỉ là bản tóm tắt tại thời điểm này:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Và views.pycũng là cơ bản:
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})
Trong Django 0.96 tôi đã có thể hack nó bằng cách thực hiện một số thứ như sau trước khi kết xuất mẫu:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_tocó vẻ đầy hứa hẹn nhưng tôi không biết làm thế nào để vượt qua the_company.idvà tôi không rõ liệu điều đó có hoạt động bên ngoài giao diện Admin hay không.
Cảm ơn. (Đây có vẻ là một yêu cầu khá cơ bản nhưng nếu tôi nên thiết kế lại một cái gì đó thì tôi sẽ mở để đề xuất.)