Use a field in a related table in search_columns in a view

18 Views Asked by At

I have two tables in a 1 to M relationship: ContactGroup and Contact. In the view for Contact, I want to be able to filter (search) on a field in ContactGroup called group_colour. When I use search_columns = ['name', 'contact_group.group_colour'] I get: KeyError: 'contact_group.group_colour'.

How do I overwrite the search to include this field?

Views.py

class ContactGeneralView(ModelView):
    search_columns = ['name', 'contact_group.group_colour']
    datamodel = SQLAInterface(Contact)

    label_columns = {"contact_group": "Contacts Group"}
    list_columns = ["name", "personal_phone", "contact_group"]
    base_order = ("name", "asc")


models.py

class ContactGroup(BaseMixin, Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True, nullable=False)
    group_colour = Column(String(50))

    def __repr__(self):
        return self.name

class Contact(BaseMixin, Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(150), unique=True, nullable=False)
    address = Column(String(564))
    birthday = Column(Date, nullable=True)
    personal_phone = Column(String(20))
    personal_celphone = Column(String(20))
    contact_group_id = Column(Integer, ForeignKey("contact_group.id"), nullable=False)
    contact_group = relationship("ContactGroup")
    gender_id = Column(Integer, ForeignKey("gender.id"), nullable=False)
    gender = relationship("Gender")

    def __repr__(self):
        return self.name

0

There are 0 best solutions below