我下午大部分时间都在冲浪,在这个特殊的困境中已经有一段时间了。
我正在试图弄清楚,如果用户驾驶过这种类型的汽车,如何将外键作为下拉选择显示出来。例如,为了尽可能简单地保持这一点...
假设我有一个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
中有相关记录的位置。提前感谢您的任何想法。
发布于 2018-08-21 05:35:54
我认为这一切都取决于你的订单和车型之间的关系,也许可以尝试在Manufacturer
和Car
之间添加一个ManyToMany
关系,这样一家制造商就可以生产很多辆汽车:
类别制造商(models.Model):
name = models.CharField(max_length=80)
car = models.ManyToManyField(Car)
那么它可能是这样做的情况:
qs = Manufacturer.objects.all(car=user.car_owned)
dropdown = forms.ModelChoiceField(qs)
在您的views.py
文件中:
form = ManufacturerForm(request.POST, user=request.user)
(您可能需要查看上面的内容是否有效,因为我不确定表单是否可以传入请求对象)。
免责声明:我看到你使用的是基于class
的view...so,我可能需要调整上面的设置。
https://stackoverflow.com/questions/51938596
复制相似问题