用例:
- 注册后,用户必须选择他的公司(不理想但可以)
- 公司存储在他的 UserProfile 中
- 车型和车型有一个对外的公司Key
- 展示时,仅向用户展示用户公司创建的汽车和车型。
造型:
class Company(models.Model):
company_name = models.CharField(max_length=50)
class UserProfile(models.Model):
user = models.OneToOneField(User)
company = models.ForeignKey(Company)
class Car(models.Model):
model_name = models.CharField(_(u"Model Name"))
car_type = models.CharField(_(u"Car Type"))
company = models.ForeignKey(Company)
class CarType(models.Model):
car_type = models.CharField(_(u"Car Type"))
company = models.ForeignKey(Company)
看法:
def main_page_view(request):
profile = request.user.get_profile()
AllCarsCreatedByTheCompany = profile.company.car_set.all()
这已经很完美了,但问题是 CarType。
问题:
-每家公司生产不同的车型。并且感谢公司外键,它已经与另一家公司分开了。
- 添加新车后,用户应从下拉列表中仅选择其公司明确创建的汽车类型,但是在这种情况下,用户会看到所有的 car_types,甚至是不是由他的公司创建的汽车类型。
我做了什么:
def new_car_view(request):
profile = request.user.get_profile()
if request.method == 'POST':
form = CarForm(request.POST)
if form.is_valid():
car = Car.objects.create(
model_name=form.cleaned_data['model_name'],
company=profile.company
)
car.save()
return HttpResponseRedirect('/')
else:
form = CarForm()
variables = RequestContext(request, {'form':form})
return render_to_response('car_add.html', variables)
形式:
class CarForm(ModelForm):
class Meta:
model = Car
exclude = ('company')
但是,表单在下拉列表中显示所有汽车类型,而不是由公司外键过滤的汽车类型。请问我错过了什么?