0
Django docsによれば、博物館アプリケーションの人と日付の関係を作成しました。 (削除不要なフィールドを持つ)Django多対多照会all()は空集合を返します
まずモデル:次に
class Agent(models.Model):
name = models.CharField(max_length=255)
dates = models.ManyToManyField(HistoricDate, 'date_for_agent', models.CASCADE, through='AgentDateType')
. . . .
class HistoricDate(models.Model):
display = models.CharField(max_length=255, help_text='Textual representation of date')
earliest = models.CharField(max_length=15, blank=True)
earliest_accuracy = models.BooleanField(default=False, verbose_name="circa")
latest = models.CharField(max_length=15, blank=True)
latest_accuracy = models.BooleanField(default=False, verbose_name="circa")
class AgentDateType(models.Model):
datation = models.ForeignKey(HistoricDate, models.PROTECT)
dated = models.ForeignKey(Agent, models.CASCADE)
date_type = models.CharField(max_length=31, choices=date_types)
. . . .
試験:、ただし
AgentDateType.objects.all()
c_life.date_for_agent.all()
c_act.date_for_agent.all()
:
caesar = Agent.objects.create(name="Gaius Julius Caesar", name_type="personal", culture="Ancient Rome", display="Julius Caesar (Roman, 100–44 B.C.)")
c_life = HistoricDate.objects.create(display="13 July 100–15 March 44 B.C.", earliest="-100-07-13", earliest_accuracy=False, latest="-44-03-15", latest_accuracy=False)
c_act = HistoricDate.objects.create(display="60–44 B.C.", earliest="-60", earliest_accuracy=False, latest="-44-03-15", latest_accuracy=False)
caesar_lives = AgentDateType.objects.create(dated=caesar, datation=c_life, source="Suetonius, Lives of the Caesars", date_type="life")
caesar_acts = AgentDateType.objects.create(dated=caesar, datation=c_act, source="Livy", date_type="activity")
を、以下のクエリが予想セットを返しますcaesar.dates.all()
は、最も簡単なはずですが、空のセットを返します。何がありますか?
ありがとうございます! ManyToManyFieldが 'on_delete'引数を受け入れないという事実には注意を払っていませんでした。 2番目の考えでは、それはコンセプトから明らかです... –
実際にカスケード効果を持たせたいのであれば(どのユースケースがあるのか分かりませんが)、あなたは 'through'テーブルを使ってそれを強制する。 –