아래에 세 개의 테이블이 address
있고 events
각 테이블에서 모든 및 필드를 반환하는 쿼리 (또는 여러 쿼리)를 작성하려고합니다 .
class Activity(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(max_length=500)
class Event(models.Model):
date = models.DateField()
start_time = models.TimeField()
duration = models.PositiveSmallIntegerField()
activity = models.ForeignKey(Activity, on_delete=models.CASCADE, related_name="activities")
class Address(models.Model):
event = models.OneToOneField(Event, on_delete=models.CASCADE, primary_key=True)
address = models.CharField(max_length=100)
이것은 내가 시도한 것이지만 적절하지 않은 것 같습니다.
adds = Address.objects.all()
for ad in adds:
for events in ad.event.all():
print("events", events)
더 나은 방법이 있습니까? 어떻게 할 수 있습니까?
감사
글쎄, 당신은이 OneToOneField
에를 Address
하나만 가질 수 있도록, Event
당을 Address
.
지금 할 수있는 일은 다음과 같습니다.
adds = Address.objects.all()
for ad in adds:
event = ad.event # you only have one event per address
다음으로 변경하는 것이 좋습니다 models.py
.
class Address(models.Model):
address = models.CharField(max_length=100)
class Event(models.Model):
date = models.DateField()
start_time = models.TimeField()
duration = models.PositiveSmallIntegerField()
address = models.ForeignKey(Address, on_delete=models.CASCADE, related_name='events')
class Activity(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(max_length=500)
event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name='activities')
이 방법은 단 하나가 Address
당 Event
,하지만 당신은 여러 개의 동일한 주소를 사용할 수 Event
의, 당신은 여러 가지고 Activity
당들 Event
.
이제 주소별로 모든 이벤트를 발행하려면 다음을 수행하십시오.
addresses = Address.objects.all()
for addr in addresses:
for event in addr.events.all():
print('event', event)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다