标签: foreign-keys

Django 中的外键向后导航

对于这个例子:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def __unicode__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog, related_name='entries')
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateTimeField()
    mod_date = models.DateTimeField()
    authors = models.ManyToManyField(Author)
    n_comments = models.IntegerField()
    n_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __unicode__(self):
        return self.headline
Run Code Online (Sandbox Code Playgroud)

那么,如何查找所有博客及其条目呢?

我想做这样的事情

q = Blog.objects.all().entries.filter(...)
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误。那么 Django 是否只支持对一个对象而不是一组对象使用向后导航属性?

django foreign-keys django-models

1
推荐指数
1
解决办法
1912
查看次数

我的数据库表中是否需要外键?

我有以下两个用于基本讨论论坛的 mysql 表。第一个表包含主题,第二个表包含对特定主题的回复。我想了解这个数据库设计中的外键概念。我需要在这里添加外键吗?它将如何有用以及如何添加到下表中。谢谢。

--
-- Table structure for table `topics`
--

CREATE TABLE IF NOT EXISTS `topics` (
  `topic_id` int(11) NOT NULL AUTO_INCREMENT,
  `topic_title` varchar(255) NOT NULL,
  `topic_content` text NOT NULL,
  `topic_author_id` int(11) NOT NULL,
  `topic_date` int(10) NOT NULL,
  PRIMARY KEY (`topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Table structure for table `replies`
--

CREATE TABLE IF NOT EXISTS `replies` (
  `reply_id` int(11) NOT NULL AUTO_INCREMENT,
  `reply_topic_id` int(11) NOT NULL,
  `reply_content` text NOT NULL,
  `reply_author_id` int(11) NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

foreign-keys

1
推荐指数
1
解决办法
3374
查看次数

DjangoAdmin 中的 limit_choices_to

我的一个模型包含一个具有数千个实例的模型的外键字段。
当我显示一条记录时,所有这些都会加载到一个下拉列表中,我a)不需要它,b)速度慢得像碎片一样,尤其是在一页上显示多个记录时。
由于下拉列表的大小,页面大小会增加到 3.5mb 的倍数。

我想过使用“limit_choices_to”来包含它,但是

country = models.IntegerField(blank=True, null=True)
location = models.ForeignKey(Geonames, limit_choices_to = {'cowcode': country}, related_name='events')
Run Code Online (Sandbox Code Playgroud)

不起作用。有没有办法做到这一点?

更新:
我想显示什么?
我想显示上面代码的来源中Geonames的所有位置 ( ) 。我只想显示这些地点,而不是所有可能地点的完整列表。countryEventRecord

为什么我不需要所有地方?
a) 页面加载时间:页面加载 3.5 分钟有点太长
b) 参见上文:事件发生在某个国家/地区,因此我不需要显示不在该国家/地区的位置

django foreign-keys django-models django-forms

1
推荐指数
1
解决办法
2855
查看次数

在 Access 中创建一对多关系仅显示“不确定”关系类型选项

所以基本上我正在尝试使用 Access 设计我的简单员工/任务跟踪数据库。

Employee我想在表与表之间创建关系Mission(多对多)。因此,我需要创建一个桥梁或连接实体,我将其命名为Mission_Assignment。显然,两个相关表(Mission_IDEmployee_ID)的 PK 应作为外键包含在该桥接实体中。

当我尝试通过将 PK Mission_IDMission_Assignment拖到另一个表来加入时,Access 没有向我显示将此关系设置为一对多的选项,即使我已选中“强制引用完整性”框。我唯一的选择是“不确定”关系类型!Mission

我想知道为什么会发生这种情况?为什么我不能建立这种一对多的关系?我尝试使用查找向导更改相关表的 PK 的数据类型,以便在关联表中将其识别为外键,但它不起作用。

任何帮助,将不胜感激。

database ms-access erd entity-relationship foreign-keys

1
推荐指数
1
解决办法
2万
查看次数

Django 按多个外键属性过滤

所以我的 Django 模型如下所示:

class Test(models.Model):
    cool_prop = models.CharField()

class Metadata(models.Model):
     key = models.CharField()
     value = models.CharField()
     test = models.ForeignKey(Test)
Run Code Online (Sandbox Code Playgroud)

我希望能够根据测试是否包含基于此元数据的键:值对来过滤测试。本质上,我希望能够做到:

tests = Test.objects.all().filter(metadata__key=key and metadata__value=value)
Run Code Online (Sandbox Code Playgroud)

但我不确定如何在 Django 中执行此操作。我研究过 F 和 Q 语句。似乎大多数 Django 操作都允许任何具有所述键的任何元数据和具有所述值的任何元数据的测试。但我需要测试其中 1 个元数据的键和值都匹配。

python django foreign-keys django-models matching

1
推荐指数
1
解决办法
4975
查看次数

Oracle SQL 外键约束忽略空值或历史值

我正在尝试向要修改的数据库表添加约束。我想在列上添加约束,以便它引用另一个表的主键。很简单,我只需要添加一个外键约束。问题是该列已经有一些空值或者不属于我将引用的表的一部分。

我的问题是如何添加引用主键但也可以接受空值(主键始终有值)的约束以及如何忽略迄今为止的现有值。是否可以?如果第二部分不是,我想我总是可以编写一个脚本来将所有无意义值(它们有一种格式,如果我可以 reg ex)更新为 null,所以我唯一需要弄清楚的是如何添加也接受空值的外键约束

sql oracle null constraints foreign-keys

1
推荐指数
1
解决办法
6685
查看次数

SQL 两次引用同一个表

我一直在修改 SQL 来为企业开发数据库,​​并且我有一个表通过其主键引用另一个表,但由于不同的原因这样做了两次。我可以这样做吗?更重要的是我应该这样做吗?

假设我们为其他公司修理汽车,并且我们拥有我们所维修的每辆车的数据库。我们为一家名为“Lots-o-Rental Cars”的公司和另一家名为“Cool Cars”的公司修理汽车。

现在,虽然 Cool Cars 拥有一系列自己的汽车,但他们还与 Lots-o-Rental Cars 达成协议,可以借用他们的一些汽车。在某些情况下,我们会针对我们在汽车上所做的工作向 Lot-o-Rental Cars 收取费用,但有时我们会针对在同一辆车上完成的工作向 Cool Cars 收取费用。

我当前的设置(此处简化)看起来有点像这样:

表:公司

列: company_id(pk)、company_name

1、分时租赁汽车

2、酷车

表:分支机构(用于显示同一公司的多个营业地点)

列: branch_id (pk)、company_id (fk)

1, 1

2, 1

3, 2

表:汽车

列: car_id (pk)、car_brand、car_model、owner_id (fk)、on_hire、hiree_id (fk)

“owner_id”和“hiree_id”都是分支表中的branch_id。“on_hire”是一个值,用于确定汽车当前租给我们服务的另一家公司是否为真。

1、福特、野马、1、是、3

2、大众、甲壳虫、1、NO、NULL

3、日产、Pulsar、2、NO、NULL

4、雪佛兰、科迈罗、3、NO、NULL

使用此布局,我可以选择car_brand、car_model、owner_id(显示为company_name),并且如果汽车已出租,还可以显示hiree_id(显示为company_name)吗?

mysql database foreign-keys primary-key

1
推荐指数
1
解决办法
4425
查看次数

Rails ActiveRecord 迁移以添加带有“NOT VALID”参数的外键

add_foreign_key 可以向 ALTER TABLE 命令添加“无效”参数吗?(Postgres,如果重要的话)

我在两个非常大的表之间有一个外键。我需要将 CASCADE DELETE 添加到密钥中。Postgres 似乎不支持将级联添加到现有的外键。解决方案是删除密钥,并使用级联添加新密钥。

很简单……除了检查约束需要很长时间。我不确定在该检查期间是否会发生任何锁定,但实际上,我只想跳过它。在我删除约束之前,数据是有效的……它稍后会有效。

Postgres 通过ALTER TABLE ADD CONSTRAINT ... NOT VALID. (这意味着“跳过验证”,即使听起来您说它无效。:耸肩:)

那么,我可以让 add_foreign_key 不进行验证吗?

activerecord ruby-on-rails foreign-keys

1
推荐指数
1
解决办法
636
查看次数

TypeORM 外键

我想将 a 引用module到 a queue。所以一个人queue可以有多个modules. 因此,我只是想存储idmodulequeue

根据 Typeorm 的文档,我应该以这种方式实现这种关系:

@ManyToOne(type => Module)
@JoinColumn({ name: "currentModuleId" })
module: Module;
Run Code Online (Sandbox Code Playgroud)

我只是想提供idmodule,而不是一个模块对象。所以我想出了这个解决方案:

模块实体

@Entity()
export class Module extends BaseEntity {
  @PrimaryColumn({ unique: true })
  public id: string;
}
Run Code Online (Sandbox Code Playgroud)

队列实体

@Entity()
export class Queue extends BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  public id: string;

  @OneToOne(() => Module)
  @JoinColumn({ name: 'currentModuleId' })
  currentModuleId: string;
}
Run Code Online (Sandbox Code Playgroud)

这有效,但我不太相信这是一个防错解决方案。我应该如何为 实现外键queue

另外:Typeorm …

postgresql foreign-keys typeorm nestjs

1
推荐指数
1
解决办法
3580
查看次数

laravel 一对多关系为空

我有 3 个模型:用户、公司和分支。

在刀片文件中,我希望能够显示用户公司所属的分支。

在我看来,我应该有以下关系:

User -> Company :用户属于一个公司,一个公司有很多用户,所以这是一对多的关系。

公司->分公司:一个公司属于一个分公司,一个分公司可以有多个公司。于是又是一对多的关系。

我在用户表中有外键: company_id 引用公司表上的 id 。公司表中的另一个 FK: branch_id 引用了分支表上的 id。

在我的刀片文件中,想要显示这样的分支名称:{{ $user->company->branch->name }} 其中只有 name 是一个属性。公司和分公司是关系。

我的查询如下所示:

 $users = User::with(['company','company.branche' => function($q){
            $q->select('name');
        }])->inRandomOrder()->paginate(24);
Run Code Online (Sandbox Code Playgroud)
<?php

namespace App;

use App\Events\GeneralEvent;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Nicolaslopezj\Searchable\SearchableTrait;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable, SoftDeletes, HasRoles, SearchableTrait;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = …
Run Code Online (Sandbox Code Playgroud)

foreign-keys relational-database laravel eloquent

1
推荐指数
1
解决办法
267
查看次数