Django一对多获取所有底层记录
Django one to many get all underlying records
我正在使用包含下表的数据库创建一个 Django 应用程序:
我创建的模型如下:
class Group(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
class Meta:
db_table = 'Group'
class Filters(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
group_id = models.ForeignKey(Group, on_delete=models.CASCADE,
db_column='GroupId')
class Meta:
db_table = 'Filters'
目标是调用端点和 return 包含所有组和基础过滤器的列表。有可能实现这一目标吗?如果可能的话,我希望它在序列化程序 class.
中
我知道我可以获得过滤记录的组,但是反过来也可以吗?
class Group(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
class Meta:
db_table = 'Group'
class Filters(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
group = models.ForeignKey(Group, on_delete=models.CASCADE,
db_column='GroupId', related_name='filters') # not group_id
这只是说,过滤器有.group但是一个组有.filters(related_name),如果你没有指定related_name
,默认是model_qs
, 所以它应该是 filters_qs
.
一些补充说明
Class 名字应该是单数
Django 通过添加 's' 创建复数名称,在你的情况下它将创建过滤器,你必须指定一个 verbose_name_plural
(更多无用的代码)
您不需要指定数据库数据、列名或其他任何内容,除非您要重新创建一个已经存在的后端或需要它的东西。
- 它是组而不是 group_id,我们都知道在 SQL 中是 group_id,但是,这是 python 并且您可以访问整个组例如,然后你
instance.id
或 instance.pk
得到它。
我正在使用包含下表的数据库创建一个 Django 应用程序:
我创建的模型如下:
class Group(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
class Meta:
db_table = 'Group'
class Filters(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
group_id = models.ForeignKey(Group, on_delete=models.CASCADE,
db_column='GroupId')
class Meta:
db_table = 'Filters'
目标是调用端点和 return 包含所有组和基础过滤器的列表。有可能实现这一目标吗?如果可能的话,我希望它在序列化程序 class.
中我知道我可以获得过滤记录的组,但是反过来也可以吗?
class Group(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
class Meta:
db_table = 'Group'
class Filters(models.Model):
id = models.AutoField(primary_key=True, editable=False)
text = models.CharField(db_column='Text', max_length=4000)
group = models.ForeignKey(Group, on_delete=models.CASCADE,
db_column='GroupId', related_name='filters') # not group_id
这只是说,过滤器有.group但是一个组有.filters(related_name),如果你没有指定related_name
,默认是model_qs
, 所以它应该是 filters_qs
.
一些补充说明
Class 名字应该是单数
Django 通过添加 's' 创建复数名称,在你的情况下它将创建过滤器,你必须指定一个
verbose_name_plural
(更多无用的代码)您不需要指定数据库数据、列名或其他任何内容,除非您要重新创建一个已经存在的后端或需要它的东西。
- 它是组而不是 group_id,我们都知道在 SQL 中是 group_id,但是,这是 python 并且您可以访问整个组例如,然后你
instance.id
或instance.pk
得到它。