Добавление дополнительного '_id' в полеPython

Программы на Python
Ответить
Anonymous
 Добавление дополнительного '_id' в поле

Сообщение Anonymous »

У меня есть следующая модель:

Код: Выделить всё

class Sample(MAFwBaseModel):
sample_id = AutoField(primary_key=True, help_text='The sample id primary key')
sample_name = TextField(help_text='The sample name')

class Resolution(MAFwBaseModel):
resolution_id = AutoField(primary_key=True, help_text='The resolution id primary key')
resolution_value = FloatField(help_text='The resolution in µm')

class CalibrationMethod(MAFwBaseModel):
method_id = AutoField(primary_key=True, help_text='The primary key for the calculation method')
multiplier = FloatField(default=1., help_text='The multiplication factor of this method')

class Image(MAFwBaseModel):
image_id = AutoField(primary_key=True, help_text='The image id primary key')
sample_id = ForeignKeyField(Sample, on_delete='CASCADE', backref='+')
filename = TextField()
checksum = TextField()
resolution_id = ForeignKeyField(Resolution,on_delete='CASCADE', backref='+')

class ProcessedImage(MAFwBaseModel):
image_id = ForeignKeyField(Image, primary_key=True, backref='+', help_text='The image id, foreign key and primary', on_delete='CASCADE')
value = FloatField(default=0)

С помощью этого определения я мог бы построить БД именно так, как мне хотелось.
Отношения между изображением и тремя другими таблицами идеальны. как показано в ERD ниже.
Изображение
Теперь я хочу сделать перекрестное соединение с помощью CalibrationMethod, и для этого я использую следующий запрос.

Код: Выделить всё

    cross_join = (ProcessedImage.select(ProcessedImage, CalibrationMethod)
.join(CalibrationMethod, JOIN.CROSS)
.execute()
)
Запрос сам по себе работает нормально, то есть я получаю именно то, что хотел, но когда я начал перебирать строки, я обнаружил что-то странное:

Код: Выделить всё

for row in cross_join:
# the image_id of ProcessedImage is not what I was expecting:
row.image_id # is the row in Image
row.image_id_id # is the field in ProcessedImage
row.method_id # is the field in CalibrationMethod.
Я не понимаю, почему иногда к атрибуту добавляется второй '_id'. Проблема только в атрибуте, потому что все столбцы в базе данных названы правильно.
Это заставляет меня думать, что это не ошибка, а скорее особенность, которую я упускаю из виду. что-нибудь. Что я упускаю?
Должно быть страница документации, которую я пропустил.
Обновить
Я прочитал эту страницу на lazy_load в документации. Если я укажу lazy_load = False, то и row.image_id, и row.image_id_id будут фактическим значением поля.
Более того, если я оставлю lazy_load = True и укажу object_id_name = 'ref_image_id ', то row.image_id будет указывать на строку изображения, а row.ref_image_id — на значение поля. Я бы предпочел обратное, возможность изменить имя строки, а не имя поля.

Подробнее здесь: https://stackoverflow.com/questions/792 ... to-a-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»