我已经覆盖了模型的默认管理器,以便根据登录的用户(一种特定于对象的权限)仅显示允许的项目:
class User_manager(models.Manager):
def get_query_set(self):
""" Filter results according to logged user """
#Compose a filter dictionary with current user (stored in a middleware method)
user_filter = middleware.get_user_filter()
return super(User_manager, self).get_query_set().filter(**user_filter)
class Foo(models.Model):
objects = User_manager()
...
Run Code Online (Sandbox Code Playgroud)
这样,每当我使用 时Foo.objects,都会检索当前用户,并将过滤器应用于默认查询集,以便仅显示允许的记录。
然后,我有一个带有 Foo 的外键的模型:
class Bar(models.Model):
foo = models.ForeignKey(Foo)
class BarForm(form.ModelForm):
class Meta:
model = Bar
Run Code Online (Sandbox Code Playgroud)
当我编写 BarForm 时,我期望只看到过滤器 Foo 实例,但未应用过滤器。我认为这是因为查询集是在 Django 启动时评估和缓存的,当时没有用户记录并且没有应用过滤器。
有没有一种方法可以让 Django 在运行时评估 ModelChoice 查询集,而不必在表单定义中明确说明?(尽管存在所有性能问题......)
编辑 我找到了查询集的评估位置(django\db\models\fields\lated.py: 887):
def formfield(self, **kwargs):
db = kwargs.pop('using', None)
defaults = …Run Code Online (Sandbox Code Playgroud) 我有两个通过外键约束链接的表。我想更改 ID 字段,但由于外键约束,以下代码失败:
UPDATE A SET id = 1479 WHERE id = 2103;
UPDATE B SET Aid = 1479 WHERE Aid = 2103;
Run Code Online (Sandbox Code Playgroud)
我知道我可以设置ON CASCADE自动执行此操作,但是如何根据具体情况执行此操作?
这段代码有什么问题??它给出错误“名称已被另一个约束使用”。另外,如果我无法在不同的表中定义相同的约束,那么有什么方法可以重用以前定义的约束?
有什么见解吗??
CREATE TABLE tbl_formats
(
format_id NUMBER(5),
format_name VARCHAR2(50),
format_desc VARCHAR2(100),
valid_from DATE,
valid_to DATE,
format_type VARCHAR2(50),
CONSTRAINT pk_format_id PRIMARY KEY(format_id)
);
CREATE TABLE tbl_format_detail
(
id NUMBER(10),
format_id NUMBER(5),
src_field VARCHAR2(200),
target_field VARCHAR2(100),
business_rule VARCHAR2(4000),
expression VARCHAR2(4000),
target_segment VARCHAR2(4),
CONSTRAINT pk_id PRIMARY KEY(id),
CONSTRAINT fk_format_id FOREIGN KEY(format_id) REFERENCES tbl_formats(format_id)
);
CREATE TABLE tbl_client_formats
(
client_format_id NUMBER(10),
format_id NUMBER(5),
client_id NUMBER(5),
CONSTRAINT pk_client_format_id PRIMARY KEY(client_format_id),
CONSTRAINT fk_format_id FOREIGN KEY(format_id) REFERENCES tbl_formats(format_id),
CONSTRAINT fk_client_id FOREIGN KEY(client_id) REFERENCES tbl_clients(client_id)
);
Run Code Online (Sandbox Code Playgroud)
表“tbl_client_formats”中定义的外键约束“fk_format_id”似乎与表“tbl_format_detail”中已定义的相同约束冲突。我是 …
我使用的是 Kendo UI Web Grid,而不是服务器包装器之一。我只在网格中显示几个字段。其余字段显示在创建或编辑弹出窗口中。对于这个弹出窗口,我使用了一个模板:
<script id="popup_editor" type="text/x-kendo-template">
<div class="k-edit-label">
<label for="Title">Title</label>
</div>
<div class="k-edit-field">
<input type="text" class="k-input k-textbox" name="Title" data-bind="value:Title" required>
</div>
</script>
Run Code Online (Sandbox Code Playgroud)
然后我从网格中调用它:
editable: {
mode: "popup",
template: $("#popup_editor").html(),
confirmation: "Are you sure?"
}
Run Code Online (Sandbox Code Playgroud)
这对输入框很有用。但是我的表中有一个外键列。我想在下拉列表中显示外键表中的所有选项,并根据表中的值选择正确的选项。我已经搜索了很多,但无法找到答案。
任何帮助将不胜感激。
javascript jquery html-select foreign-key-relationship kendo-grid
我知道可以将主键内联声明为
CREATE TABLE `my_table` (
`id` INTEGER PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)
我怀疑是否可以以相同的方式声明外键,例如
CREATE TABLE `my_table` (
`foreign_id` INTEGER FOREIGN KEY `other_table` (`other_table_id`)
);
Run Code Online (Sandbox Code Playgroud) 所以我在尝试更新外键模型的字段时遇到了麻烦。我正在尝试通过另一个模型的方法更新该字段,但它似乎无法正常工作,因为我在运行我的 tests.py 时得到了不正确的值。我正在尝试更新“total_purchased”的值。这是我基本上想要完成的一个例子:
我正在使用 Django 1.6.4
如果问题太长而无法总结,是否允许使用以下 2 行?我在 django 类模型方法中执行此操作:
Ex: Model.ForeignKeyModel.field = some_value
Model.ForeignKeyModel.save()
Run Code Online (Sandbox Code Playgroud)
有以下3种型号:
class Meal (models.Model):
name = models.CharField(max_length=255)
total_purchased = models.IntegerField(default=0, validators=[MaxValueValidator(capacity)])
capacity = models.IntegerField(default=500)
class Item (models.Model):
cart = models.ForeignKey(Cart)
meal = models.ForeignKey(Meal)
quantity = models.IntegerField(validators=[MinValueValidator(0)], default=0)
class Cart (models.Model):
delivery = models.ForeignKey(DeliveryInfo)
subscription = models.BooleanField(default=False)
customer = models.ForeignKey(User)
def add(self, meal, quantity):
""" Dual Add/Remove from cart method, (quantity replaces current quantity) """
item = Item.objects.get_or_create(cart=self, meal=meal)[0]
remaining_capacity = item.meal.capacity - item.meal.total_purchased
# …Run Code Online (Sandbox Code Playgroud) 我有一个表,用于映射其他两个表的两个主键。我将这两个字段作为外键。映射表没有主键 当我尝试插入两个表中已有的 2 个值时,出现Cannot add or update a child row: aforeign key constraintfail错误。我该如何解决这个问题?
我的表是这样的:
CREATE TABLE IF NOT EXISTS fuse_package_component_members
( component_id int(11) NOT NULL,
member_type int(11) NOT NULL,
member_id int(11) NOT NULL,
active_date date NOT NULL,
inactive_date date NOT NULL,
KEY component_id (component_id),
KEY member_id (member_id) )
ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE fuse_package_component_members
ADD CONSTRAINT comp_id_fk
FOREIGN KEY (component_id) REFERENCES fuse_component_definition (component_id) ON UPDATE NO ACTION,
ADD CONSTRAINT ele_id_fk
FOREIGN KEY (member_id) REFERENCES fuse_product_element …Run Code Online (Sandbox Code Playgroud) 我定义了一个抽象类,它有一个ForeignKey. 我有多个派生模型类,但是当我尝试生成架构迁移脚本时,south 向我显示错误。
class BlogEntryBase(models.Model):
author = models.CharField(null=True, blank=True, max_length=100)
title = models.CharField(null=True, blank=True, max_length=255)
created_by = models.ForeignKey("main.UserProfile", verbose_name="Created By", related_name="%(class)s_set", blank=False, null=False)
class CatBlogEntry(BlogEntryBase):
pass
class DogBlogEntry(BlogEntryBase):
pass
Run Code Online (Sandbox Code Playgroud)
错误信息:
animal.catblogentry: Accessor for field 'created_by' clashes with related field 'UserProfile.catblogentry_set'. Add a related_name argument to the definition for 'created_by'.
animal.catblogentry: Reverse query name for field 'created_by' clashes with related field 'UserProfile.catblogentry_set'. Add a related_name argument to the definition for 'created_by'.
animal.dogblogentry: Accessor for field 'created_by' clashes with related …Run Code Online (Sandbox Code Playgroud) python django abstract-class foreign-key-relationship django-south
我正在使用实体框架 7(核心)和 Sqlite 数据库。当前使用comboBox通过此方法更改实体类别:
/// <summary>
/// Changes the given device gategory.
/// </summary>
/// <param name="device"></param>
/// <param name="category"></param>
public bool ChangeCategory(Device device, Category category)
{
if (device != null && category != null )
{
try
{
var selectedCategory = FxContext.Categories.SingleOrDefault(s => s.Name == category.Name);
if (selectedCategory == null) return false;
if (device.Category1 == selectedCategory) return true;
device.Category1 = selectedCategory;
device.Category = selectedCategory.Name;
device.TimeCreated = DateTime.Now;
return true;
}
catch (Exception ex)
{
throw new InvalidOperationException("Category change for …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,经过几年来从几个不同编码人员的输入经历了一些重大转变.某些表包含通过引用列对其他数据的引用,但没有外键约束.这意味着有些表可能包含死链接.
我想将外键约束添加到所有引用列.如果某些数据可能引用死链接而其他数据实际上可能为空,我怎样才能确保成功.
我想我需要这样说:
ALTER TABLE dbo.Users ADD CONSTRAINT FK_Users_Persons FOREIGN KEY
(
Person_ID --In some cases Person_ID will be null
) REFERENCES dbo.People
(
Person_ID
) ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT FOR REPLICATION
GO
ALTER TABLE dbo.Users
NOCHECK CONSTRAINT FK_Users_Persons
GO
COMMIT
Run Code Online (Sandbox Code Playgroud)
如果这是准确的,如果有任何隐藏的陷阱,请告诉我?
提前致谢
django ×3
foreign-keys ×3
mysql ×3
python ×2
c# ×1
cart ×1
django-south ×1
html-select ×1
javascript ×1
jquery ×1
kendo-grid ×1
memcached ×1
oracle ×1
sql-server ×1
sqlite ×1
t-sql ×1