在Django Postgresql中,不使用外键查询数据库表

13 浏览
0 Comments

在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

提前感谢您的意见和建议。

0
0 Comments

问题的出现原因:

- 用户想要查询一个具有特定`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`元素。

以上就是问题的出现原因以及解决方法的整理。

0