users.models.pyとfriends.models.pyの2つのmodels.pyファイルがあります。Djangoのシグナル
1つの問題があります:ユーザーがUserProfileモデルから削除した場合、彼の友情ネットワークもすべて削除する必要があります。それはとても自然です。
しかし、ときに私は、私はエラーを持っているusers.model.pyするFrienshipをインポート:は、名前の友情
をインポートすることはできません私はエラーがこれらの2つのファイルであるため、相互インポートの生じた、と私は理解してシグナルの助けを借りて、この問題を簡単に解決できることは知っていますが、私は正しい方法でそれをどうやってやるのか分かりません。
この特定のケースで誰かを助けることができますか? users.models.pyで
:friends.models.pyで
from friends.models import Friendship
class UserProfile(models.Model):
username = models.Charfield(max_length=50)
...
def delete(self, *args, **kwargs):
Friendship.objects.remove_all(self)
self.delete(*args, **kwargs)
:事前に
from users.models import UserProfile
class FriendshipManager(models.Manager):
def remove_all(self, user):
usr = Friendship.objects.get(user=user).friends
frs = [i.user for i in usr.all()]
for fr in frs:
usr.remove(fr)
class Friendship(models.Model):
user = models.Foreignkey(UserProfile)
friends = models.ManyToManyField('self')
objects = FriendshipManager()
感謝!
あなたは間違った方法、それを見ています。循環輸入は、悪い設計の兆候です。回避策を見つける時間ではなく、リファクタリングの時間です。密接に関係するこのモデルは、同じアプリの一部である必要があります。 –
私は@Chris Prattに同意します –
しかし、600行以上の非常に大きなmodels.pyファイルがあります。私はこれらのクラスを分離したいと思っていた... –