【发布时间】:2018-08-20 21:16:48
【问题描述】:
我下午大部分时间都在冲浪,并且在这个特殊的困境中已经有一段时间了。
如果用户驾驶过这种类型的汽车,我试图弄清楚如何从本质上将外键呈现为下拉选项。出于示例目的并使其尽可能简单...
假设我有一个Cars、Manufacturers 和一个UserProfile 模型。
我有一个Cars 的模型...
class Cars(models.Model):
car_name = models.CharField(max_length=80)
class = models.ForeignKey(Manufacturer,null=True,on_delete=models.DO_NOTHING,related_name='car_manufacturer')
我有一个Manufacturers 的模型...
class Manufacturers(models.Model):
manu_name = models.CharField(max_length=80)
然后我有一个UserProfile 模型....
class Userprofile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
user_name = models.CharField(max_length=80)
car_owned = models.ForeignKey(Car,null=True,on_delete=models.DO_NOTHING,related_name='car_owned')
到目前为止一切都很好......
我有一个视图,我列出了所有Manufacturers,这也很好。它在下面的表单视图中显示了我期望的所有制造商。
class ManufacturerForm(forms.Form):
dropdown = forms.ModelChoiceField(queryset=Manufacturer.objects.all())
def __init__(self, *args, **kwargs):
super(ManufacturerForm, self).__init__(*args, **kwargs)
self.fields['dropdown'].widget.attrs['class'] = 'choices1'
self.fields['dropdown'].empty_label = ''
我正在使用下面的 FORMVIEW 来显示表单...
class ManufacturerView(LoginRequiredMixin,FormView):
form_class = ManufacturerForm
template_name = 'Directory/HTMLNAME.html'
def get_form_kwargs(self):
kwargs = super(ManufacturerView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def form_valid(self, form):
manufacturer = form.cleaned_data['dropdown']
return HttpResponseRedirect(reverse("NAME:manufacturer",kwargs={'pk':manufacturer.pk}))
这一切都很好。但是,我不知道如何将制造商下拉列表限制为仅用户驾驶的汽车。我试图从本质上将下拉显示限制为仅与用户根据其个人资料拥有的汽车相关的制造商。我研究了反向查找,并尝试了类似于下面概述的方法来解决我的问题...
class ManufacturerForm(forms.Form):
dropdown = forms.ModelChoiceField(queryset=Manufacturer.objects.filter(car_manufacturer=1)
def __init__(self, *args, **kwargs):
super(ManufacturerForm, self).__init__(*args, **kwargs)
self.fields['dropdown'].widget.attrs['class'] = 'choices1'
self.fields['dropdown'].empty_label = ''
但这显然只给了我Manufacturer 模型的记录1。我试图弄清楚如何根据他们的 car_owned 数据仅显示与个人用户相关的记录。我可以列出所有制造商,然后只显示ListView 中的相关记录,但我试图将下拉列表限制为仅在ListView 中有相关记录的地方。提前感谢您的任何想法。
【问题讨论】:
标签: django python-3.x django-models django-forms django-views