0

私はDjangoモデルを書くのが初めてです。私は、各人がさまざまな数のポジションを持って働いている、Person モデルが必要でした。

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    positions = models.ForeignKey('Position')

class Position(models.Model):
    person = models.ForeignKey(Person)
    company = models.CharField(max_length=200)
    summary = models.TextField()
    start_date = models.DateField()
    end_date = models.DateField()
    currently_there = models.BooleanField() 

個人が複数のポジションを持つことができるように設定するにはどうすればよいですか?

4

4 に答える 4

1

あなたはすでにそれを解決しています!

逆 多くのリレーションが QuerySet を返すため、データベースをクエリするのと同じメソッドを使用して、関連する行をフェッチします。

すなわち。

# Grab a person
some_person = Person.objects.get(pk=2)

# Get the persons positions
positions = some_person.position_set.filter(currenty_there=True)

# Add a new position for this person
some_person.position_set.add(some_new_position)

リバース セットにはmodelname_setデフォルトで名前が付けられます。よりわかりやすい名前が必要な場合は、フィールドに related_name を追加できます。

class Position(models.Model):
    person = models.ForeignKey(Person, related_name="positions")
    ...

positions = some_person.positions.all()
于 2013-07-26T18:12:27.117 に答える
1

あなたが持っているものは正しいです (あなたには多くの役職を持つ 1 人がいます)。

と最初は思っManyToManyFieldたのですが、これは確かone to manyにその人に固有の位置であれば関係があると思います。

于 2013-07-26T17:55:51.087 に答える
0

Position クラスの最後に以下を追加します。

person = models.ForeignKey(Person)

基本的には1対多の関係です(1人で複数の役職を兼務する場合があります)。外部キー制約を作成するには、データベースを再構築する必要があります (syncdb は最初から再作成できないため、サウス マイグレーションを使用します)。

于 2013-07-26T18:02:38.410 に答える
0

一部の人々が述べているように、あなたはそれを正しく持っています。外部キーを使用する場合、それを宣言するモデルには、他のモデルとの 1 対多の関係があります。あなたの場合、 aPersonは 1 対多の関係にPositionあり、 aは複数Person持つことができますPositionsが、 aPositionは 1 つしか持つことができませんPerson

RelatedManagerを使用してPositions個人にアクセスできます

Positionsfor eachにアクセスするには、次のPersonようにします

harry = Person.objects.get(first_name="Harry", last_name="Potter")
harry.position_set.all()

を作成するPositionにはPerson

harry.position_set.create(company="Hogwarts", summary="Student", ... )

etc...
于 2013-07-26T18:18:22.407 に答える