Django Model将外键设置为另一个Model的字段

wecizke3  于 2023-02-10  发布在  Go
关注(0)|答案(3)|浏览(192)

有没有办法在django中把一个外键设置为另一个模型的 field
例如,假设我有一个ValidationRule对象,我希望该规则定义另一个模型中的哪个字段需要验证(以及一些其他信息,比如它是否可以为空、数据类型、范围等)。
有没有办法在django中存储这个字段级Map?

uxhixvfz

uxhixvfz1#

我还没有尝试过,但似乎从Django 1.0开始,你就可以这样做了:

class Foo(models.Model):
    foo = models.ForeignKey(Bar, to_field='bar')

这里有相关文档。

k4aesqcs

k4aesqcs2#

是和否。FK关系是在类级别描述的,并且在数据库中镜像FK关联,因此不能直接在FK参数中添加额外的信息。
相反,我建议使用一个字符串来保存另一个表上的字段名:

class ValidationRule(models.Model):
    other = models.ForeignKey(OtherModel)
    other_field = models.CharField(max_length=256)

这样,您可以使用以下命令获取字段:

v = ValidationRule.objects.get(id=1)
field = getattr(v, v.other_field)

请注意,如果您使用的是多对多字段(而不是一对多字段),则内置支持创建自定义中间表,以便使用through选项保存 meta数据。

hivapdat

hivapdat3#

需要使用**“models.ForeignKey()"中的“to_field”**设置其他模型中的其他字段:

外键到字段

关联对象上的字段。默认情况下,Django使用关联对象的主键。如果你引用一个不同的字段,该字段必须unique=True。
例如,“产品”模型中的**“类别”字段作为外键引用了“类别”模型中的“名称”字段**,如下图所示。* 注意,“类别”模型中被引用的字段“名称”需要“unique=True”“primary_key=True”**否则出错:

# "models.py"

from django.db import models
                                            # "unique=True" or
class Category(models.Model):               # "primary_key=True" are needed 
    name = models.CharField(max_length=100, unique=True)
    
class Product(models.Model):
    name = models.CharField(max_length=100)                
    categories = models.ForeignKey(
        Category, 
        to_field='name', # ← Here
        on_delete=models.PROTECT
    )

相关问题