从QuerySelectField删除重复项

时间:2018-12-21 13:54:41

标签: flask flask-sqlalchemy flask-wtforms flask-admin

我遇到了以下问题,我想知道是否有可能。

我有一个flask-admin adminview设置,带有一个额外的表单字段,该字段显示基于sql模型中特定列(类别)的下拉列表。参见代码以进行澄清:

型号:

typedef float vec3[3];

typedef struct Cameras {
    vec3 eye;
    vec3 target;
} Camera;

Camera c = 
{
  .eye = {1.0, 2.0, 3.0},   
  .target = {4.0, 5.0, 6.0},   
};

Camera c1 = 
{
  .target = {4.0, 5.0, 6.0},   
};

Camera c2 = 
{
  .eye = {1.0, 2.0, 3.0},   
};

我在Flask-Admin中有一个额外的表单字段,如下所示:

class Item(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(128), index = True)
    category = db.Column(db.String(16))

这一切都可以正常工作,除非类别列中有重复项,然后使用这些重复值填充下拉列表。是否可以从下拉列表中删除这些重复项,或者至少仅显示唯一值?

1 个答案:

答案 0 :(得分:0)

基本上,我通过如下方式重写QuerySelectField类中的类方法,即通过将唯一标签附加到列表中并检查每个下一个标签是否在该列表中来解决此问题。我仍然认为应该有更好的方法...

def iter_choices(self):
    labels = []     
    if self.allow_blank:           
        yield ('__None', self.blank_text, self.data is None)        

    for pk, obj in self._get_object_list():      

    if self.get_label(obj) not in labels:                        

        labels.append(self.get_label(obj))                
        yield (pk, self.get_label(obj), obj == self.data)