Два внешних ключа в одной модели
Я создаю свое первое приложение на Django и у меня возникли проблемы с экспортом некоторых значений.
У меня есть модель, назовем ее Машины, с некоторыми атрибутами (покупатель, имя, модель, серийный номер и т.д.).
Другая моя модель - это модель категории посещений, в которой есть 2 причины для посещения (обслуживание, осмотр)
Наконец, у меня есть последняя модель, в которой есть visitDetails (дата посещения, заметки, причина посещения (которая является внешним ключом модели категории посещения, и детали машины (которая является внешним ключом модели машины).
Как я могу получить для каждого визита подробную информацию о причине визита?
Мне удалось получить все MachineDetails для каждой машины с помощью:
machine = Machines.objects.get(id=id) visit_details = machine.details.all() - details является relate_name для machine_details, который является объектом внутри модели visitDetails с внешним ключом Machines.
Но я не могу понять, как также получить категорию посещения для каждого посещения.
Мой код:
def export_to_excel(request, id):
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="export.xlsx"'
wb = Workbook()
ws = wb.active
ws.title = "Products"
# Add headers
headers = ["FOO", "BAR", "FOO", "BAR"]
ws.append(headers)
# Add data from the model
machine_details = Machines.objects.get(id = id)
details = machine_details.visit.all()
for detail in details:
ws.append([detail.visitDate,detail.workingHours, detail.loadHours, detail.cNotes])
# Save the workbook to the HttpResponse
wb.title = 'title'
wb.save(response)
return response
МОДЕЛИ
class Machines(models.Model):
cOwner = models.CharField(max_length=32)
cModel = models.CharField(max_length=32)
cSerial = models.CharField(max_length=32)
cBuyDate = models.DateField()
cTechnician = models.ForeignKey(User,
on_delete=models.SET_NULL, blank=True, null=True,
related_name="technician")
def __str__(self) -> str:
return self.cOwner
class visitCategory(models.Model):
visitReason = models.CharField(max_length=64)
def __str__(self) -> str:
return self.visitReason
class cVisit(models.Model):
itemDetails = models.ForeignKey(Machines,
on_delete=models.Case,
blank='True', null='True', related_name="visit")
visitReason = models.ForeignKey(visitCategory,
on_delete=models.CASCADE, blank="True",
null="True",related_name="vReason")
visitDate = models.DateField()
workingHours = models.IntegerField(default=0)
loadHours = models.IntegerField(default=0)
cNotes = models.TextField(default="")
def dateRender(self):
return self.visitDate.strftime("%Y-%m-%d")