使用案例:建模(外鍵)在Django
- 在註冊時,用戶必須選擇他的公司(不理想,但確定)
- 公司存儲在他的用戶配置
- 的汽車模型和汽車類型具有公司的外鍵
- 僅顯示由用戶公司創建的汽車和手寫體應顯示給用戶。
建模:
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。
問題:
- 每個公司產生不同的汽車類型。並感謝公司foreignkey,它已經與另一家公司分離。
- 在添加一個新的汽車時,用戶應該從下拉菜單中只有他的公司已經明確創建的汽車類型選擇,但是在這種情況下,用戶可以看到所有的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')
但是形式顯示在下拉列表中,而不是由公司對外過濾以外的所有汽車類型鍵。請問我錯過了什麼?
您已經減少了太多的例子:您在車型或表格中沒有提及汽車類型。你如何顯示下拉菜單? –
@DanielRoseman道歉,你是對的。我剛剛更新了這個問題。謝謝。 – Houman