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 Rates
và Clients
. Mỗi Client
nê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 Company
lựa chọn (vì nó đã được chọn thông qua nút "Thêm khách hàng" trên Company
trang) và cũng giới hạn các Rate
lựa chọn đó Company
.
Làm thế nào để tôi đi về điều này trong Django 1.0?
forms.py
Tậ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.py
cũ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_to
có vẻ đầy hứa hẹn nhưng tôi không biết làm thế nào để vượt qua the_company.id
và 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.)