在Django 1.10中,在应用程序模型之间使用foreignKey

14 浏览
0 Comments

在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日
0
0 Comments

尝试一下:

from teams.models import Team
# in the member model field
team_of_member = models.ForeignKey(Team);

0
0 Comments

你想要提供小组成员的小组信息。这完全取决于你的业务逻辑。按照定义,一个小组有许多成员,但是一个成员可以是多个小组的一部分吗?如果是,那么你有一个多对多关系。如果不是,那么你有一个一对多关系。\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)

0