在Django Postgresql中,不使用外键查询数据库表
在Django Postgresql中,不使用外键查询数据库表
我正在尝试查询一张表,该表中有许多具有相同名称的记录,这是有意为之的。在我的例子中,我使用了汽车的制造商,不幸的是,我已经排除了使用外键的可能性。长话短说。无论如何,我已经确定可以使用ModelChoiceField和Postgresql的distinct命令来查询该表,如下所示:
class Vehicle(forms.Form): dropdown = forms.ModelChoiceField(queryset=Car.objects.none()) def __init__(self, *args, **kwargs): super(Vehicle, self).__init__(*args, **kwargs) self.fields['dropdown'].empty_label = '' qs = Car.objects.distinct('vehicle_make')
上面的代码对于下拉菜单的需求已经做到了,它将ModelChoiceField限制为汽车的vehicle_make的唯一值。
挑战在于当我尝试在模板中显示具有该vehicle_make的所有记录时。我尝试使用Detail View,但它只显示了该个别记录。这是有道理的,因为详细视图只是针对该记录的,但我正在努力找出如何查询表格以显示具有该vehicle_make的所有记录。我也尝试了ChoiceField,但似乎也无法使其工作。我在模板中尝试了下面代码的几个变种,但没有任何一种方法似乎能够奏效。
{% for vehicle_make in car.queryset %} {{ vehicle_make }} {% endfor %}
我的模型如下:
class Car(models.Model): vehicle_make = models.Charfield(max_length=264,unique=False) def __str__(self): return self.vehicle_make
提前感谢您的意见和建议。
问题的出现原因:
- 用户想要查询一个具有特定`vehicle_make`值的所有`Car`对象,但是不想使用外键。
- 用户想要在URL中传递一个搜索查询,然后在视图中解析该查询。
解决方法:
- 使用`Car.objects.filter(vehicle_make = 'foo')`来查询具有特定`vehicle_make`值的所有`Car`对象。
- 使用`ListView`来列出所有的汽车对象。
- 在URL中传递一个搜索查询,然后在视图中解析该查询。
- 可以使用`icontains`或`iexact`查找,或者使用Django的全文搜索来解决问题。
- 在模板中,可以通过`{% for car in car_list %}{{car}}{% endfor %}`来访问查询集中的所有`Car`对象。
- 可以使用`Car.objects.values('vehicle_make').distinct()`获取所有不同的`vehicle_make`值,并将其传递给模板来构建一个`select`元素。
以上就是问题的出现原因以及解决方法的整理。