2024-06-08 13:39:04 发布
网友
我想在django模型中设置一个ForeignKey字段,该字段有时指向另一个表。但我希望可以在这个字段中插入一个id,它引用另一个表中可能不存在的条目。因此,如果行存在于另一个表中,我希望获得ForeignKey关系的所有好处。但如果不是,我希望这只是一个数字。
ForeignKey
这可能吗?这就是泛型关系的意义吗?
这可能与声明FOREIGN KEY和创建列而不实际将其声明为外键一样简单。这样,您将得到o.obj嫒u id,如果对象存在,o.obj将工作,并且——我认为——如果您尝试加载一个实际上不存在的对象(可能是DoesNotExist),将引发一个异常。
DoesNotExist
但是,我认为没有任何方法可以让syncdb为您这样做。我发现syncdb被限制到无用的程度,所以我完全绕过它,用自己的代码创建模式。您可以使用syncdb创建数据库,然后直接更改表,例如ALTER TABLE tablename DROP CONSTRAINT fk_constraint_name。
syncdb
ALTER TABLE tablename DROP CONSTRAINT fk_constraint_name
当然,在DELETE CASCADE和所有引用完整性检查中也会丢失。
我是新来的Django,所以我现在不知道它是否提供了你想要的东西。我想到了这样的事情:
from django.db import models class YourModel(models.Model): my_fk = models.PositiveIntegerField() def set_fk_obj(self, obj): my_fk = obj.id def get_fk_obj(self): if my_fk == None: return None try: obj = YourFkModel.objects.get(pk = self.my_fk) return obj except YourFkModel.DoesNotExist: return None
我不知道你是否使用了contrib管理应用程序。使用PositiveIntegerField而不是ForeignKey,该字段将在管理站点上用文本字段呈现。
很久以前就有人问过这个问题,但对于新手来说,现在有一种内置的方法可以通过在外键上设置db_constraint=False来处理这个问题:
https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.db_constraint
customer = models.ForeignKey('Customer', db_constraint=False)
或者,如果希望可以为空并且不强制引用完整性:
customer = models.ForeignKey('Customer', null=True, blank=True, db_constraint=False)
如果我们不能保证以正确的顺序建立关系,我们就使用这个方法。
编辑:更新链接
这可能与声明FOREIGN KEY和创建列而不实际将其声明为外键一样简单。这样,您将得到o.obj嫒u id,如果对象存在,o.obj将工作,并且——我认为——如果您尝试加载一个实际上不存在的对象(可能是
DoesNotExist
),将引发一个异常。但是,我认为没有任何方法可以让
syncdb
为您这样做。我发现syncdb
被限制到无用的程度,所以我完全绕过它,用自己的代码创建模式。您可以使用syncdb创建数据库,然后直接更改表,例如ALTER TABLE tablename DROP CONSTRAINT fk_constraint_name
。当然,在DELETE CASCADE和所有引用完整性检查中也会丢失。
我是新来的Django,所以我现在不知道它是否提供了你想要的东西。我想到了这样的事情:
我不知道你是否使用了contrib管理应用程序。使用PositiveIntegerField而不是ForeignKey,该字段将在管理站点上用文本字段呈现。
很久以前就有人问过这个问题,但对于新手来说,现在有一种内置的方法可以通过在外键上设置db_constraint=False来处理这个问题:
https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.db_constraint
或者,如果希望可以为空并且不强制引用完整性:
如果我们不能保证以正确的顺序建立关系,我们就使用这个方法。
编辑:更新链接
相关问题 更多 >
编程相关推荐