在Django 1.10中,在应用程序模型之间使用foreignKey
在Django 1.10中,在应用程序模型之间使用foreignKey
我有一个使用Django 1.10构建的网站。该网站有3个不同的应用程序:团队,成员和新闻。
第一个应用程序称为teams,其中有一个称为Team的模型。
以下是Team/models.py:
from django.db import models from django.db.models.signals import pre_save from django.utils.text import slugify class Team(models.Model): name = models.CharField(max_length=255) description = models.TextField() slug = models.CharField(max_length=255, default='team', editable=True) class Meta: ordering = ('name',) def __unicode__(self): return self.name
第二个应用程序称为members,其中有一个称为Member的模型。
以下是Member/models.py:
from django.db import models class Piloto(models.Model): name = models.CharField(max_length=255) biography = models.TextField() slug = models.CharField(max_length=255, default='piloto', editable=True) class Meta: ordering = ('name',) def __unicode__(self): return self.name
我想在成员个人资料中包含团队名称,因此我知道应该是这样的:
team_of_member = models.ForeignKey();
但我不知道在括号中应该放什么,或者如何将团队的模型导入成员的模型。我遵循Django 1.10文档,但它不起作用,我还尝试了这个链接,但它不起作用。你可以帮忙吗? 谢谢
编辑:
我尝试按照@Bulva的建议做,所以现在我的代码像这样:
from django.db import models from equipos.models import Team class Member(models.Model): name = models.CharField(max_length=255) team = models.ForeignKey('teams.Team', null=True) biography = models.TextField() slug = models.CharField(max_length=255, default='piloto', editable=True) class Meta: ordering = ('name',) def __unicode__(self): return self.name
admin 更改状态以发布 2023年5月21日
你想要提供小组成员的小组信息。这完全取决于你的业务逻辑。按照定义,一个小组有许多成员,但是一个成员可以是多个小组的一部分吗?如果是,那么你有一个多对多关系。如果不是,那么你有一个一对多关系。\n\n在一对多的假设下,外键信息必须放在被引用的模型中。然后:\n\n
from django.db import models from team.models import Team # Generally, apps are in all lower-case (assuming your app is called team) class Member(models.Model): name = models.CharField(max_length=255) team = models.ForeignKey('team.Team', related_name = 'members', null=True) # Do not forget to put team.Team inside a pair of single-quotes. biography = models.TextField() slug = models.CharField(max_length=255, default='piloto', editable=True) class Meta: ordering = ('name',) def __unicode__(self): # use def __str__(self): in Python 3+ return self.name
\n\n在你的视图中,你可以这样说:\n\n
albert_team = albert.team albert_teammates = albert_team.members
\n\n在多对多的假设下,更自然的方式是在小组模型中捕获关系:\n\n
from django.db import models from django.db.models.signals import pre_save from django.utils.text import slugify class Team(models.Model): name = models.CharField(max_length=255) description = models.TextField() slug = models.CharField(max_length=255, default='team', editable=True) members = models.ManyToManyField('team.Member', related_name = 'teams') class Meta: ordering = ('name',) def __unicode__(self): return self.name
\n\n在views.py中:\n\n
albert_teams = albert.teams all_albert_teammates = [] for team in albert_teams: all_albert_teammates.append(team.members)