2016-11-23 4 views
2

私はちょうど別の開発者からDjangoプロジェクトを引き継いで、彼が何をしたのかを理解しようとしています。djangoデータを保持しながらOneToOneFieldをForeignKeyに移動

私が正しく理解し、正しい方向に向いていると誰かが私に知らせることができれば、それはすばらしいことになります。

現時点でのモデルは、この(簡体字)のようになります。

class Address: 
    street_name=models.CharField() 

class Provider: 
    address=models.OneToOneField(Address) 

class User: 
    address=models.OneToOneField(Address) 

しかし、これは、各アドレスが一意であることを意味しないので、同じ家に住ん人。

(私はSymfonyフレームワークから来ています)私はプロバイダとユーザにOneToManyフィールドを追加しますが、DjangoではAddressにForeignKeyを追加します。

class Address: 
    street_name=models.CharField() 
    provider=models.ForeignKey(Provider) 
    user=models.ForeignKey(User) 

class Provider: 

class User: 

もちろん、私はデータベース内のアドレス情報を保持したいと思います。

どうすればよいですか?データの移行(https://docs.djangoproject.com/en/1.8/topics/migrations/#data-migrations

+0

本当に背後にあるビジネス上の決定を知っておく必要があること – Sayse

+1

いいえ、それはプロバイダとユーザーの外国人です。あなたの提案では、アドレスごとに単一のプロバイダ/ユーザのみが許可されますが、プロバイダ/ユーザごとに複数のアドレスが許可されます。 –

答えて

3

OneToOneFieldForeignKeyに変更すると、複数のユーザーとプロバイダに対して同じアドレスを選択できるようになります。

移行を作成し、それを実行してデータベース内の一意制約を削除する必要があります。データの移行は必要ありません。

+0

これはまさにこれです。数ヶ月前に何も問題なくこれをやった。コードをチェックして、間違ったデータを防ぐために一意の制約に頼らないようにしてください。 – Exelian

+0

@Exelianのコメントを拡張するには、引き続き 'user.address'を実行することができますが、' address.user'各アドレスは複数のユーザーを持つことができるため、機能しなくなります。 – Alasdair

+0

ありがとうございます! この方法では試していなかった... Djangoのドキュメントから、ForeignKeyが "Many"クラスにあるはずであることがわかりました。私は間違ったことを理解しましたか? – Reto

関連する問題