1
上創建實例表中的連接在下面的簡單的系統,其中用戶可以收集任何數量的任何類型的徽章的:自動生成在Django
__________ _____________ _______
| User | | BadgeDone | | Badge |
| -------- | <------ | ----------- | ------> | ----- |
| username | | count = 0 | | name |
|__________| | FK user_id | |_______|
| FK badge_id |
|_____________|
models.py:
class BadgeDone(models.Model):
count = models.IntegerField(default = 0)
user = models.ForeignKey(
'auth.User',
on_delete = models.CASCADE,
)
badge = models.ForeignKey(
'Badge',
on_delete = models.CASCADE,
)
def __str__(self):
return self.user.username + '_' + self.badge.name
class Badge(models.Model):
name = models.CharField(max_length = 50)
def __str__(self):
return self.name
我試圖自動創建新創建的用戶和每個現有的徽章之間的連接,反之亦然(即在新創建的徽章和每個現有用戶之間)。
,得到期望的行爲的一個例子:
Badges.objects.all()
<QuerySet [<Badge: Bronze>, <Badge: Silver>, <Badge: Gold>]>
BadgesDone.objects.all()
<QuerySet []>
User.object.all()
<QuerySet []>
u = User(username='John')
u.save()
Badges.objects.all()
<QuerySet [<Badge: Bronze>, <Badge: Silver>, <Badge: Gold>]>
BadgesDone.objects.all()
<QuerySet [<BadgeDone: John_Bronze>, <BadgeDone: John_Silver>, <BadgeDone: John_Gold>]>
User.object.all()
<QuerySet [User: John]>
b = Badge(name='BlackGold')
b.save()
Badges.objects.all()
<QuerySet [<Badge: Bronze>, <Badge: Silver>, <Badge: Gold>, <Badge: BlackGold>]>
BadgesDone.objects.all()
<QuerySet [<BadgeDone: John_Bronze>, <BadgeDone: John_Silver>, <BadgeDone: John_Gold>, <BadgeDone: John_BlackGold>]>
User.object.all()
<QuerySet [User: John]>
目前我使用的掃描丟失的連接,並生成這些外部腳本,但這只是爲快速概念性測試OK,所以我的問題。 在確保鬆散耦合的保留的同時,在Django中實現這一點的正確方法是什麼?
你說的是'makemigrations'? –