我正在創建一個表單,但卡在這個問題上。
我在商業模式中有幾項業務。每個企業都有自己的服務中的服務模型。用戶僅與一項業務相關聯。兩者業務,服務都有關系。
我的挑戰
我有一份服務申請表。當我展示此服務請求模型表時,我只想顯示客戶/用戶所屬的 One Business 的服務。請幫助我這怎么可能。我認為它會像“實體 = 業務”。我明白它不是那么簡單。
例如:Business1 將“Cars”和“Motor Bikes”作為服務,Business2 將“指甲”和“Hair Spa”作為服務。如果來自 Business1 的用戶登錄并打開服務請求表,她/他應該在服務選擇下拉串列中只看到“汽車”和“摩托車”。
'''
# class Service(models.Model):
class Business(models.Model):
name = models.CharField(max_length=25)
description = models.CharField(max_length=100)
active = models.BooleanField(default=True)
class BusinessUser(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
business = models.ForeignKey(Business, on_delete=models.CASCADE, related_name='business')
class Services(models.Model):
business = models.ForeignKey(Business, on_delete=models.CASCADE, related_name='business_services')
name = models.CharField(max_length=15)
active = models.BooleanField(default=True)
class ServiceRequest(models.Model):
business = models.ForeignKey(Business, on_delete=models.DO_NOTHING)
service = models.ForeignKey(Service, on_delete=models.DO_NOTHING, blank=True)
requester_name = models.CharField(max_length=15)
class ServiceRequestForm(forms.ModelForm):
class Meta:
model = ServiceRequest
fields = '__all__'
def newServiceRequest(request): //the view
if request.method == 'GET':
user = request.user
business = user.business
serviceRequestForm = ServiceRequestForm(instance=business)
return render(request,'service.html', {'form':serviceRequestForm})
'''
uj5u.com熱心網友回復:
一種方法是使用django-select2. 請參閱此處的安裝說明
然后在您的表單中,您可以執行以下操作:
class ServiceRequestForm(forms.ModelForm):
class Meta:
model = ServiceRequest
fields = '__all__'
widgets = {
'business': ModelSelect2Widget(
model=Business,
attrs={'class': 'form-control', 'data-minimum-input-length': 0},
search_fields=['name__icontains'],
),
'service': ModelSelect2Widget(
model=Services,
attrs={'class': 'form-control', 'data-minimum-input-length': 0},
search_fields=['name__icontains'],
dependent_fields={'business': 'business'},
),
}
關鍵要素是dependent_fields選項。在此處閱讀更多相關資訊
uj5u.com熱心網友回復:
您可以傳遞當前業務并queryset在ModelForm建構式中更新您的。
class ServiceRequestForm(forms.ModelForm):
def __init__(self, business, *args, **kw):
super(ServiceRequestForm, self).__init__(*args, **kw)
self.fields['business'].queryset = \
self.fields['business'].queryset.filter(pk=business.pk)
class Meta:
model = ServiceRequest
fields = '__all__'
def newServiceRequest(request): # the view
user = request.user
business = user.business
if request.method == 'POST':
serviceRequestForm = ServiceRequestForm(business, data=request.POST)
if (serviceRequestForm.is_valid()):
serviceRequest = serviceRequestForm.save()
# another stuff...
# ...
else:
serviceRequestForm = ServiceRequestForm(business)
return render(request,'service.html', {'form':serviceRequestForm})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/337046.html
