如何在 Django 序列化程序中获取外键 ID 而不是引用模型
How to get foreign key id instead of referenced model in Django serializers
我真的是 Django 的新手,但在我们的一个项目中,我们有一个 Django 后端,没有其他人愿意接触它,所以我必须对其进行一些微调。
模型设置,一切正常,但我们需要一个新的视图,其中
我们需要关于我们模型之一的基本数据,没有参考模型(只需要外键 ID)。我花了一天时间寻找解决方案。可能是太琐碎了,哪里都没写:)
型号:
class Row(models.Model):
row = models.IntegerField(null=True, blank=True)
height = models.TextField(null=True, blank=True)
key = models.CharField(max_length=36, unique = True)
def save(self, *args, **kwargs):
super(Row, self).save(*args, **kwargs)
class Column(models.Model):
col = models.IntegerField(null=True, blank=True)
width = models.TextField(null=True, blank=True)
key = models.CharField(max_length=36, unique = True)
def save(self, *args, **kwargs):
super(Column, self).save(*args, **kwargs)
class Product(models.Model):
key = models.CharField(max_length=36, unique = True)
text = models.TextField(null=True, blank=True)
column = models.ForeignKey(Column, db_column='column_key', to_field='key', related_name="products")
row = models.ForeignKey(Row, db_column='row_key', to_field='key', related_name="products")
merged_with = models.ForeignKey("Product", db_column='merged_with_key', to_field='key', related_name="merges", blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
updated_by = models.ForeignKey('auth.User', null=True)
现在我需要一个视图中的产品列表,json 输出如下所示:
{
id: 1,
key: "1746495d-8ea0-42df-9ed9-06df621ef7c5",
column_key: "<key of refrenced column>"
merged_with_key: "<key of refrenced product>"
row_key: "<key of refrenced row>"
text: "sometext"
}
提前致谢,
乔巴
这里你需要的是ModelSerializer的简单扩展。
谁的定义看起来像这样。
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Products
fields = ('id','key', 'column', 'merged_with', 'row', 'text')
还有像这样的新观点。
class ProductListView(APIView):
def get(self, request):
return Response(ProductSerializer(Products.objects.all(), many=True).data)
您必须将 url 映射到此视图并导入必要的依赖项。
您的输出看起来与序列化器一样略有不同。
{
id: 1,
key: "1746495d-8ea0-42df-9ed9-06df621ef7c5",
column: "<key of refrenced column>"
merged_with: "<key of refrenced product>"
row: "<key of refrenced row>"
text: "sometext"
}
希望对您有所帮助。
我真的是 Django 的新手,但在我们的一个项目中,我们有一个 Django 后端,没有其他人愿意接触它,所以我必须对其进行一些微调。 模型设置,一切正常,但我们需要一个新的视图,其中 我们需要关于我们模型之一的基本数据,没有参考模型(只需要外键 ID)。我花了一天时间寻找解决方案。可能是太琐碎了,哪里都没写:)
型号:
class Row(models.Model):
row = models.IntegerField(null=True, blank=True)
height = models.TextField(null=True, blank=True)
key = models.CharField(max_length=36, unique = True)
def save(self, *args, **kwargs):
super(Row, self).save(*args, **kwargs)
class Column(models.Model):
col = models.IntegerField(null=True, blank=True)
width = models.TextField(null=True, blank=True)
key = models.CharField(max_length=36, unique = True)
def save(self, *args, **kwargs):
super(Column, self).save(*args, **kwargs)
class Product(models.Model):
key = models.CharField(max_length=36, unique = True)
text = models.TextField(null=True, blank=True)
column = models.ForeignKey(Column, db_column='column_key', to_field='key', related_name="products")
row = models.ForeignKey(Row, db_column='row_key', to_field='key', related_name="products")
merged_with = models.ForeignKey("Product", db_column='merged_with_key', to_field='key', related_name="merges", blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
updated_by = models.ForeignKey('auth.User', null=True)
现在我需要一个视图中的产品列表,json 输出如下所示:
{
id: 1,
key: "1746495d-8ea0-42df-9ed9-06df621ef7c5",
column_key: "<key of refrenced column>"
merged_with_key: "<key of refrenced product>"
row_key: "<key of refrenced row>"
text: "sometext"
}
提前致谢,
乔巴
这里你需要的是ModelSerializer的简单扩展。 谁的定义看起来像这样。
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Products
fields = ('id','key', 'column', 'merged_with', 'row', 'text')
还有像这样的新观点。
class ProductListView(APIView):
def get(self, request):
return Response(ProductSerializer(Products.objects.all(), many=True).data)
您必须将 url 映射到此视图并导入必要的依赖项。
您的输出看起来与序列化器一样略有不同。
{
id: 1,
key: "1746495d-8ea0-42df-9ed9-06df621ef7c5",
column: "<key of refrenced column>"
merged_with: "<key of refrenced product>"
row: "<key of refrenced row>"
text: "sometext"
}
希望对您有所帮助。