у меня двойная модель
class LabReportRelation(models.Model):
labReportId = models.AutoField(primary_key=True)
collectedSampleId = models.ForeignKey(CollectedSample, null=True)
....
....
class Meta:
db_table = 'labReportRelation'
class CollectedSample(models.Model):
id = models.AutoField(primary_key=True, max_length=5)
collectionTime = models.DateTimeField()
....
....
class Meta:
db_table = 'collectedSample'
Я хочу обновить модель collectionTime CollectedSample, связанную с labereportId.
мой текущий запрос:
LabReportRelation.objects.filter(labReportId__in=labReportIdList)
.prefetch_related('collectedSampleId')
.update(
collectedSampleId_collectionTime=updateTime
)
Но я получаю эту ошибку.
FieldDoesNotExist(u"labReportRelation has no field named 'collectedSampleId_collectionTime'",)
Пожалуйста помогите.






О, получилось, collectSampleId - это внешний ключ, поэтому вы должны использовать select_related
LabReportRelation.objects.filter(labReportId__in=labReportIdList)
.select_related('collectedSampleId')
.update(
collectedSampleId__collectionTime=updateTime
)
lab_report вернет список LabReportRelation, поэтому мы не можем напрямую обновлять, как lab_report.collectedSampleId..................
@GAJESHPANIGRAHI, вам следует использовать select_related, я обновил ответ.
мое плохое использование этого collectedSampleId__collectionTime=updateTime
Я пробовал, но все равно получаю ту же ошибку. Я думаю, что мы что-то упускаем.
Следующие работы:
CollectedSample.objects.filter(labreportrelation__labReportId__in=labReportIdList).update(collectionTime=updateTime)
Предположим, что labReportIdList — это список.
Выполняется следующее (модели точно такие же, как в OP):
import os
_module = os.path.split(os.path.dirname(__file__))[-1]
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{}.settings".format(_module))
import django
django.setup()
from app.models import CollectedSample, LabReportRelation
from django.utils.timezone import now
if __name__ == "__main__":
sample = CollectedSample.objects.create(collectionTime=now())
report = LabReportRelation.objects.create(collectedSampleId=sample)
print(f"Initial collection time: {sample.collectionTime} for sample {sample.id}")
labReportIdList = [report.labReportId]
updateTime = now()
CollectedSample.objects.filter(labreportrelation__labReportId__in=labReportIdList).update(collectionTime=updateTime)
sample = CollectedSample.objects.get(pk=sample.pk)
print(f"Updated collection time: {sample.collectionTime} for sample {sample.id}")
Отпечатки:
Initial collection time: 2019-02-23 07:51:10.578433+00:00 for sample 3
Updated collection time: 2019-02-23 07:51:10.735463+00:00 for sample 3
Он следует за отношением ForeignKey в обратном порядке, как описано в официальной документации здесь.
FieldDoesNotExist(u"labReportRelation has no field named 'collectedSampleId__collectionTime'",)Получаю ту же ошибку, что и пробовал.