Django 通过外键或其他字段引用模型
Posted
技术标签:
【中文标题】Django 通过外键或其他字段引用模型【英文标题】:Django reference a Model by foreign key or a different field 【发布时间】:2016-06-18 15:53:00 【问题描述】:我正在使用 Django REST 框架。我有两个模型,站点和状态。
class Sites(models.Model):
site_id = models.AutoField(primary_key=True)
status = models.ForeignKey(Statuses, models.DO_NOTHING, blank=True, null=True)
class Statuses(models.Model):
status_id = models.AutoField(primary_key=True)
description = models.CharField(max_length=255, blank=True, null=True, unique=True)
class Meta:
managed = True
db_table = 'Statuses'
我希望能够在网站上执行 GET,并返回 Statuses.description 字段(而不是 Statuses.status_id)。另外,我希望它可以在 POST 中互换使用 status_id 或 description 来创建新站点。这种类型的功能属于哪里(序列化程序、模型等)?
我知道我可以通过向 Sites 模型添加一个属性然后在 Sites 序列化程序中引用该字段来完成我的问题的第一部分。
@property
def status(self):
return self.row_status.description
但是我认为模型的约定是它应该是数据库表的 1:1 表示。有没有更好的方法来做到这一点?
【问题讨论】:
【参考方案1】:这很适合序列化程序,如下所示:
class SitesSerializer(serializers.ModelSerializer):
description = serializers.CharField(source='status.description')
class Meta:
model = Sites
fields = ('site_id', 'description')
(但status
字段可能不应该设置null=True
。)
【讨论】:
这回答了我问题的第一部分,并且比在模型中使用 @property 要好得多。但是,它并没有解决问题的第二部分:有没有办法通过整数(id)或字符串(描述)发布新站点和引用状态?以上是关于Django 通过外键或其他字段引用模型的主要内容,如果未能解决你的问题,请参考以下文章