标签: foreign-keys

在admin中以内联形式限制select中的外键选项

该模型的逻辑是:

  • A Building有很多Rooms
  • A Room可能在另一个内部Room(例如,一个壁橱 - 在'self'上的ForeignKey)
  • A Room只能Room在同一建筑物内的另一个内部(这是棘手的部分)

这是我的代码:

#spaces/models.py
from django.db import models    

class Building(models.Model):
    name=models.CharField(max_length=32)
    def __unicode__(self):
        return self.name

class Room(models.Model):
    number=models.CharField(max_length=8)
    building=models.ForeignKey(Building)
    inside_room=models.ForeignKey('self',blank=True,null=True)
    def __unicode__(self):
        return self.number
Run Code Online (Sandbox Code Playgroud)

和:

#spaces/admin.py
from ex.spaces.models import Building, Room
from django.contrib import admin

class RoomAdmin(admin.ModelAdmin):
    pass

class RoomInline(admin.TabularInline):
    model = Room
    extra = 2

class BuildingAdmin(admin.ModelAdmin):
    inlines=[RoomInline]

admin.site.register(Building, BuildingAdmin)
admin.site.register(Room)
Run Code Online (Sandbox Code Playgroud)

内联将仅显示当前建筑物中的房间(这是我想要的).但问题是,对于inside_room下拉列表,它会显示Rooms表中的所有房间(包括其他建筑物中的房间).

在内联中rooms,我需要将inside_room选择限制rooms在当前building(当前正由主BuildingAdmin …

django inline admin foreign-keys limit

69
推荐指数
7
解决办法
3万
查看次数

外键是否在SQL Server中自动编入索引?

以下SQL语句是否会自动在Table1.Table1Column上创建索引,还是必须显式创建索引?

数据库引擎是SQL Server 2000

       CREATE TABLE [Table1] (
. . .
            CONSTRAINT [FK_Table1_Table2] FOREIGN KEY 
            (
                [Table1Column]
            ) REFERENCES [Table2] (
                [Table2ID]
            )

        )
Run Code Online (Sandbox Code Playgroud)

sql-server indexing foreign-keys

66
推荐指数
3
解决办法
3万
查看次数

Django"无法添加或更新子行:外键约束失败"

我有一个模型Coupon,以及一个Photo带有ForeignKey它的模型:

class Photo(models.Model):
    coupon = models.ForeignKey(Coupon,
                               related_name='description_photos')
    title = models.CharField(max_length=100)
    image = models.ImageField(upload_to='images')
Run Code Online (Sandbox Code Playgroud)

我在管理员中设置内联,所以现在我可以将照片添加到管理员的优惠券中.

我尝试添加一个,上传成功,但后来我得到Django的调试页面,出现此错误:

IntegrityError at /admin/coupon/coupon/321/
(1452, 'Cannot add or update a child row: a foreign key constraint fails (`my_project`.`coupon_photo`, CONSTRAINT `coupon_id_refs_id_90d7f06` FOREIGN KEY (`coupon_id`) REFERENCES `coupon_coupon` (`id`))')
Run Code Online (Sandbox Code Playgroud)

这是什么以及如何解决这个问题?

(如果重要,这是一个MySQL数据库.)

编辑:我在一个Sqlite3数据库上尝试了它,它有一个稍微不同的数据集,并且它有效,所以在我当前的数据库中可能有松散的数据?我怎样才能找到并删除它?

mysql django orm foreign-keys

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

如何在sql server中删除外键约束?

我想从另一个表中删除外键,以便我可以插入我选择的值.

我是数据库的新手,所以请告诉我正确的sql查询删除或删除外键值.

database sql-server foreign-keys

65
推荐指数
4
解决办法
24万
查看次数

MySQL外键允许NULL?

我正拼凑一个图片网站.基本模式非常简单的MySQL,但是我在尝试表示与图像相关的可能管理标志("不合适","受版权保护"等)时遇到了一些麻烦.我目前的想法如下:

tblImages (
    imageID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ...
);

tblImageFlags (
    imageFlagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    imageID INT UNSIGNED NOT NULL,
    flagTypeID INT UNSIGNED NOT NULL,
    resolutionTypeID INT UNSIGNED NOT NULL,
    ...
);

luResolutionTypes (
    resolutionTypeID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    resolutionType VARCHAR(63) NOT NULL,
    ...
);
Run Code Online (Sandbox Code Playgroud)

(为了便于阅读而被截断;各种外键和索引都是有序的,我发誓)

tblImageFlags.flagTypeID在标志类型的查找表上是外键的,你可以想象tblImageFlags.resolutionTypeID 应该是外键的luResolutionTypes.resolutionTypeID.手头的问题是,当首次发布一个标志时,没有逻辑解决方案类型(我很好地宣称这个NULL); 但是,如果设置了一个值,它应该是外键键到查找表.

我找不到这种情况的MySQL语法解决方法.它存在吗?最佳参赛者是:

  • 添加"未经调整"的分辨率类型
  • 添加一个NULL条目luResolutionTypes.resolutionTypeID(这甚至可以在AUTO_INCREMENT列中工作吗?)

感谢您的见解!

PS Bonus指向任何人告诉我,在数据库的情况下,它是"索引"还是"索引".


后续行动:感谢Bill Karwin指出了表格结构中出现的语法错误(NOT NULL如果您希望它允许,请不要设置列NULL …

mysql database null referential-integrity foreign-keys

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

MongoDB规范化,外键和加入

在我深入潜入MongoDB几天之前,我想我会问一个非常基本的问题,我是否应该深入研究它.我基本上没有使用nosql的经验.

我确实读过一些文档数据库的一些好处,我认为对于这个新的应用程序,它们会非常棒.对于许多类型的对象(许多m-to-m关系)和子类来说,做收藏夹,评论等总是很麻烦 - 这是一种很难处理的问题.

我还有一个结构,在SQL中定义会很麻烦,因为它非常嵌套并且比15个不同的表更好地转换为文档.

但我对一些事情感到困惑.

  1. 是否可以保持数据库的标准化?我真的不想更新多条记录.这仍然是人们如何处理MongoDB中数据库的设计?

  2. 当用户收藏某本书并且此选择仍存储在用户文档中时,会发生什么情况,但该书籍会被删除?没有外键,关系如何分离?我自己负责删除所有链接吗?

  3. 如果用户喜欢不再存在的书并且我查询它(某种类型的连接)会发生什么?我必须在这里做任何容错吗?

database foreign-keys normalization mongodb nosql

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

在PostgreSQL中删除带有外键的行

我想删除包含外键的行,但是当我尝试这样的事情时:

DELETE FROM osoby WHERE id_osoby='1'
Run Code Online (Sandbox Code Playgroud)

我得到这个声明:

错误:表"osoby"上的更新或删除违反表"kontakty"上的外键约束"kontakty_ibfk_1"DETAIL:键(id_osoby)=(1)仍然从表"kontakty"引用.

如何删除这些行?

sql postgresql foreign-keys cascading-deletes

63
推荐指数
5
解决办法
10万
查看次数

将列添加为外键使得外键约束中引用的ERROR列不存在

我有以下设置,

CREATE TABLE auth_user ( id int PRIMARY KEY );
CREATE TABLE links_chatpicmessage ();
Run Code Online (Sandbox Code Playgroud)

我正在尝试将一个名为senderto 的列添加links_chatpicmessage到另一个名为auth_user's idcolumn的表中.

为实现上述目标,我在终端上尝试以下方法:

ALTER TABLE links_chatpicmessage
  ADD FOREIGN KEY (sender)
  REFERENCES auth_user;
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

错误:外键约束中引用的列"sender"不存在

我该如何解决?

database postgresql foreign-keys alter-table

62
推荐指数
4
解决办法
7万
查看次数

MySQL InnoDB是不同数据库之间的外键

我想知道,如果它是用在InnoDB中可能MySQL有一个table外键引用在不同的另一个表database

如果是这样,如何做到这一点?

mysql database innodb foreign-keys

61
推荐指数
3
解决办法
3万
查看次数

强制InnoDB重新检查表/表上的外键?

我有一组InnoDB表,我经常需要通过删除一些行并插入其他行来维护.其中一些表具有引用其他表的外键约束,因此这意味着表加载顺序很重要.要插入新行而不必担心表的顺序,我使用:

SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)

之前,然后:

SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)

后.

加载完成后,我想检查更新表中的数据是否仍然保持参照完整性 - 新行不会破坏外键约束 - 但似乎没有办法做到这一点.

作为测试,我输入的数据确实违反了外键约束,并且在重新启用外键检查时,mysql没有产生任何警告或错误.

如果我试图找到一种方法来指定表加载顺序,并在加载过程中留在了外键检查,这不会让我在具有自引用外键约束的表加载数据,因此这将不是一个可接受的解决方案

有没有办法强制InnoDB验证表或数据库的外键约束?

mysql innodb foreign-keys

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