Объект «InstrumentedList» не имеет атрибута «Location» при обходе отношения - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 3 таблицы, которые мне трудно пройти. Они состоят из таблицы CAR, таблицы LOCATION и таблицы CARLOCATION. Автомобиль хранит данные об автомобиле, местоположение хранит данные о местоположении, а таблица расположения находится посередине и связывает автомобиль с его текущим местоположением.

Используя Flask и SQLAlchemy, я хочу, чтобы пользователь мог выполнять поиск автомобиль по идентификатору, который связывается с таблицей CarLocation с помощью отношения, а таблица CarLocation также связывается с таблицей Location с помощью отношения. Итак, Car -> CarLocation -> Местоположение

Однако, когда я вызываю Car.CarLocation.Location.Name, я получаю сообщение об ошибке:

File "D: \ Documents \ GitHub \ car_share \ karshare \ views.py ", строка 370, в поисковой машине. Местоположение '

Любой, кто может мне помочь, будет спасателем!

Мой models.py выглядит следующим образом:

class Car(db.Model):
    __tablename__ = 'Car'
    __table_args__ = {'schema': 'KarShare'}

    CarID = db.Column(db.Integer, primary_key=True, server_default=db.text(
            "nextval('\"KarShare\".\"Car_CarID_seq\"'::regclass)"))
    Make = db.Column(db.String(64), nullable=False)
    Model = db.Column(db.String(64), nullable=False)
    Year = db.Column(db.Integer, nullable=False)
    Odometer = db.Column(db.Integer, nullable=False)
    CarType = db.Column(db.String(64), nullable=False)
    NumSeats = db.Column(db.Integer, nullable=False)
    FuelType = db.Column(db.String(64), nullable=False)
    CostPerHour = db.Column(db.Float, nullable=False)
    TransmissionType = db.Column(db.String(9), nullable=False)
    Registration = db.Column(db.String(), nullable=False)


class CarLocations(db.Model):
    __tablename__ = 'CarLocations'
    __table_args__ = {'schema': 'KarShare'}

    CarID = db.Column(db.ForeignKey('KarShare.Car.CarID'), primary_key=True,
                      nullable=False)
    CurrentLocationID = db.Column(db.ForeignKey('KarShare.Location.LocationID'),
                                  nullable=True)
    Location = db.relationship("Location", backref="CarLocations",
                               lazy=True)
    Car = db.relationship("Car", backref="CarLocations",lazy=True)


class Location(db.Model):
    __tablename__ = 'Location'
    __table_args__ = {'schema': 'KarShare'}

    LocationID = db.Column(db.Integer, primary_key=True, server_default=db.text(
            "nextval('\"KarShare\".\"Location_LocationID_seq\"'::regclass)"))
    Name = db.Column(db.String(64), index=True, unique=True, nullable=False)
    StreetAddress = db.Column(db.String(128), nullable=False)
    City = db.Column(db.String(64), index=True, nullable=False)
    State = db.Column(db.String(64), index=True, nullable=False)
    Longitude = db.Column(db.Numeric(precision=9, scale=6), nullable=False)
    Latitude = db.Column(db.Numeric(precision=8, scale=6), nullable=False)
    CarSpaces = db.Column(db.Integer, nullable=False)

И простой код, вызывающий ошибка:

     SearchedCar = Car.query.filter_by(CarID=form.search.data).first()
     Make = SearchedCar.Make
     Model = SearchedCar.Model
     Year = SearchedCar.Year
     Odometer = SearchedCar.Odometer
     CarType = SearchedCar.CarType
     NumSeats = SearchedCar.NumSeats
     FuelType = SearchedCar.FuelType
     CostPerHour = SearchedCar.CostPerHour
     TransmissionType = SearchedCar.TransmissionType
     CurrentLocation = SearchedCar.CarLocations.Location.Name
     Registration = SearchedCar.Registration

Спасибо за любую помощь, которую вы можете оказать!

1 Ответ

0 голосов
/ 28 апреля 2020

Car имеет список CarLocation через отношения:

- CurrentLocation = SearchedCar.CarLocations.Location.Name
+ if SearchedCar.CarLocations:
+     CurrentLocation = SearchedCar.CarLocations[0].Location.Name
...