当前位置: 首页 > 知识库问答 >
问题:

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

段干飞翮
2023-03-14

我有一个Django 1.10内置的网站。该网站有3种不同的应用程序:团队、成员和新闻。

第一个叫做团队的应用程序有一个叫做团队的模型

这是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

第二个应用称为成员,它有一个名为成员的模型。

这是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

共有3个答案

鱼旺
2023-03-14

为了做你想做的(假设提供的代码是你完整的“有问题的”代码),你应该:

在Member/models.py中:

from django.db import models
from teams.models import Team  # <--add this line

class Piloto(models.Model):
        name = models.CharField(max_length=255)
        team_of_member = models.ForeignKey(Team, on_delete=models.CASCADE); # <--add this line
        biography = models.TextField()
        slug = models.CharField(max_length=255, default='piloto', editable=True)

        class Meta:
                ordering = ('name',)

        def __unicode__(self):
                return self.name

在你这样做之后,记得:
pythonmanage.pymakaffations
pythonmanage.py迁移

改变你的模型状态。

祝你好运:)

姬欣怡
2023-03-14

试试这个:

from teams.models import Team

# in the member model field
team_of_member = models.ForeignKey(Team);
法子昂
2023-03-14

你想要的是提供该成员所在的团队。这完全取决于你的业务逻辑。根据定义,一个团队有许多成员,但是一个成员能成为许多团队的一部分吗?如果是,你有多对多的关系。如果没有,你有一对多的关系。

在一对多假设下,外键信息必须放在引用模型中。然后:

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

在你看来,你可以这样说:

albert_team = albert.team  
albert_teammates = albert_team.members

在多对多假设下,更自然地捕捉团队模型中的关系:

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
albert_teams = albert.teams

all_albert_teammates = []
for team in albert_teams:
    all_albert_teammates.append(team.members)
 类似资料:
  • 我有两个应用程序:同事和服务,每个都有自己的模型 在coworkers models.py中,我可以“从services.models导入服务”。 当我尝试在services models.py中“from coworkers.models import Status”时,会收到以下错误消息: 回溯(最近一次调用):文件“/Users/lucas/Documents/projetos/cwk-ma

  • 问题内容: 我有一个正在运行的Flask应用程序,该应用程序是根据我们在网上和Miguel Grinberg的“ Flask Web开发”书中找到的最佳实践组合设置的。 现在,我们需要第二个Python应用程序,它不是Web应用程序,并且需要访问与Flask应用程序相同的模型。我们想重复使用相同的课程模型,因此两个应用程序都可以从共享代码中受益。 我们删除了关于flask- sqlalchemy扩

  • 我对表达和node.js有点陌生,我不知道app.use和app.get.之间的区别。似乎你可以用它们来发送信息。例如: 似乎与此相同:

  • 创建一个基于Django3的全栈项目似乎是最佳实践(或至少一种常用方法),该项目使用特定于项目的Django应用程序(而不是独立的Django应用程序),其结构如下(参见此处): 应用程序(此处:)通过以最基本的形式(没有规则、视图等)集成 和 在另一个应用程序(例如)中使用一个应用程序的逻辑(例如)可以很好地工作(例如通过中的)。 但是,如果我试图在app2的逻辑中访问app1的模型,我会得到。

  • 问题内容: 我想知道我们是否可以使用新的iOS 8功能在应用程序之间共享数据:应用程序组(使用NSUserDefaults)-还是应用程序组仅在主应用程序及其扩展名之间共享数据? 我实际上在应该在它们之间共享数据的两个应用程序(它们属于同一公司)上启用了“应用程序组”功能。它们也具有相同的“应用程序组”内容(例如group.com.company.myApp)。 这是第一个代码(在Swift中)

  • 我已经阅读了一些关于将Web应用和API应用部署到Azure的教程。然而,我仍然有点不确定为什么你会使用一个而不是另一个。 我可以创建一个新的。NET解决方案,并将其部署为Web应用程序,那么为什么我会特别需要API应用程序呢?这些都是专门为ASP优化的。NET Web API,其中Web应用程序用于交付HTML?