djangoでは、多対1の関係と多対多の関係を概念的に区別できないようです。SQLやデータベースでどのように機能するかを理解し、外部キーなどの概念を心から理解していますが、たとえば、次のことは理解していません。
多対多の関係の両端は、もう一方の端への自動APIアクセスを取得します。APIは、「後方」の1対多の関係と同じように機能します。しかし、私はまだそれを概念的に見ることができません。
多対多の例:
class Reporter(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
def __unicode__(self):
return u"%s %s" % (self.first_name, self.last_name)
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
reporter = models.ForeignKey(Reporter)
def __unicode__(self):
return self.headline
class Meta:
ordering = (’headline’,)
私はこれを行うことができます:
>>> r = Reporter(first_name=’John’, last_name=’Smith’, email=’john@example.com’)
>>> r.save()
>>> a = Article(id=None, headline="This is a test", pub_date=datetime(2005, 7, 27), reporter=r)
>>> a.save()
>>> a.reporter
<Reporter: John Smith>
したがって、外部キーを介してArticlesクラスからReportersクラスにアクセスできました。
多対多の例:
class Publication(models.Model):
title = models.CharField(max_length=30)
def __unicode__(self):
return self.title
class Meta:
ordering = (’title’,)
class Article(models.Model):
headline = models.CharField(max_length=100)
publications = models.ManyToManyField(Publication)
def __unicode__(self):
return self.headline
class Meta:
ordering = (’headline’,)
私の質問は、上記の多対多クラスで行ったのと同じように、ArticleクラスのManyToManyFieldを介してPublicationクラスにアクセスできることです。では、M2MはM2oneとどのように異なりますか?m2mでできる他のことは何ですか。(もちろん両方で逆にすることもできますが、混乱しないように、当面は両方の逆の関係を無視しようとしています。)ですから、私の質問をより適切に表現するために、通常はm2mで他に何をしますか。 m2oneで?
免責事項-プログラミングは初めてですが、djangoの公式ドキュメントのモデルに関する100ページのセクション全体を読んでください。可能であれば、それらを参照しないでください。私はすでに彼らから学んでいます。
また、コードの方がよく理解できるので、できればコード例をいくつか含めてください。