0

モデル (A) がモデル (B) の定義に依存しているが、モデル (B) もモデル (A) の定義に依存している場合、どのように対処しますか。

たとえば、私は

class event(models.Model):
    competition_start = models.DateField() 
    competitors = models.ManyToManyField(picture)
    results = models.CommaSeparatedIntegerField(max_length=20)

class picture(models.Model):
    uploader = models.OneToOneField(UserProfile)
    upload_date = models.DateField()
    image = models.ImageField(upload_to="media")
    score = models.DecimalField(max_digits=10,decimal_places=10)
    score_RD = models.DecimalField(max_digits=10,decimal_places=10)
    rated = models.BooleanField()
    last_competed = models.DateField() 
    competition = models.OneToOneField(event) 

競技者フィールドは定義されている画像に依存していますが、画像は定義されているイベントに依存しています。

各画像 (A) はイベントと 1 対 1 の関係を共有しますが、イベントには複数の他の画像 (セット (S)-A) が含まれる場合があることに注意してください。

パッティングに交換してみました

competitors = models.ManyToManyField(picture) 
user_pic = models.OneToOneField(picture)

イベント内で「競合」フィールドを削除しますが、SQL ではこれが許可されていないと思います。誰かが理由を説明できますか?

1 つのフィールドに対して OneToOne 関係が必要で、別のフィールドに対して ManyToMany 関係が必要な場合、どのような修正を行う必要がありますか? (2 つの同じクラス間)

ありがとうございました :)

4

2 に答える 2

2

OneToOneクラス名の文字列をandの定義に渡して、ForeignKey「遅延」評価させることができます。

competitors = models.ManyToManyField('picture')

また、モデル クラス名の規則はキャメル ケースです (例: 'picture' => 'Picture', 'event' => 'Event')。

于 2012-12-27T00:58:23.017 に答える
1
class event(models.Model):
  competition_start = models.DateField() 
  competitors = models.ManyToManyField('MODULE.picture')
  results = models.CommaSeparatedIntegerField(max_length=20)
  ...

また、定義上、1 対 1 と多対多の両方を持つことはできません。Picture クラスの関係を 1 対 1 ではなく外部キーにする必要があると思います。

于 2012-12-27T00:59:11.973 に答える