Katakanlah saya memiliki yang berikut ini di 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)
Yaitu ada beberapa Companies
, masing-masing memiliki kisaran Rates
dan Clients
. Masing Client
- masing harus memiliki basis Rate
yang dipilih dari orang tuanya Company's Rates
, bukan yang lain Company's Rates
.
Saat membuat formulir untuk menambahkan Client
, saya ingin menghapus Company
pilihan (seperti yang telah dipilih melalui tombol "Tambah Klien" pada Company
halaman) dan batasi Rate
pilihan itu Company
juga.
Bagaimana saya melakukannya tentang Django 1.0?
forms.py
File saya saat ini hanyalah boilerplate saat ini:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Dan views.py
itu juga dasar:
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})
Di Django 0.96 saya bisa meretas ini dengan melakukan sesuatu seperti berikut sebelum merender template:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
tampaknya menjanjikan tetapi saya tidak tahu bagaimana cara masuk the_company.id
dan saya tidak jelas apakah itu akan bekerja di luar antarmuka Admin.
Terima kasih. (Ini sepertinya permintaan yang cukup mendasar tetapi jika saya harus mendesain ulang sesuatu, saya terbuka untuk saran.)