django - 加入 2 个表时出现属性错误
问题描述
有 2 个表类别 sub_category 我想通过公共列 id 加入,类别。这样做时我收到属性错误。我首先想要类别的数据,然后是 sub_category 的数据。
模型.py:
class Category(models.Model):
category = models.CharField(max_length=50)
image = models.CharField(max_length=500)
store_image = models.CharField(max_length=1000)
is_active = models.IntegerField()
parent_id = models.IntegerField()
class Meta:
managed = False
db_table = 'category'
class SubCategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, db_column='category')
sub_category = models.CharField(max_length=50)
is_active = models.IntegerField()
class Meta:
managed = False
db_table = 'sub_category'
视图.py:
class CategoryView(generics.GenericAPIView):
def post(self, request):
queryset = Category.objects.all().exclude(parent_id=0)
serializer = CategorySerializer(queryset, many=True)
return Response(serializer.data)
序列化器.py:
class SubCategorySerializer(serializers.ModelSerializer):
class Meta:
fields = ["id", "category", "sub_category", "is_active"]
model = SubCategory
class CategorySerializer(serializers.ModelSerializer):
sub_category_data = SubCategorySerializer(read_only=True, source='id')
class Meta:
fields = ["id", "category", "image", "is_active", "parent_id","sub_category_data"]
model = Category
错误:
AttributeError: Got AttributeError when attempting to get a value for field `category` on serializer `SubCategorySerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `int` instance.
Original exception text was: 'int' object has no attribute 'category'.
解决方案
您可以将序列化程序更改为
class SubCategorySerializer(serializers.ModelSerializer):
class Meta:
fields = ["id", "category", "sub_category", "is_active"]
model = SubCategory
class CategorySerializer(serializers.ModelSerializer):
sub_category_data = serializers.SerializerMethodField()
class Meta:
fields = ["id", "category", "image", "is_active", "parent_id",
"sub_category_data"]
model = Category
@staticmethod
def get_sub_category_data(obj):
sub = SubCategory.objects.filter(category_id=obj.id)
return SubCategorySerializer(sub, many=True).data
推荐阅读
- java - 删除文本中的一行;方法不起作用
- c# - 如何将动态创建的 xml 文件添加到 C# 中的现有内存流中?
- java - JSESSIONID cookie 在 Chrome 中丢失
- node.js - 无法提取地理键 - 使用 Atlas 而不是本地 MongoDB
- python - dev_appserver.py 在本地运行 python 2.7 项目时导致错误,但在 GAE 上运行良好
- django - 如何在 Django 中的抽象类的子级之间执行计算
- python - 删除连续三个大写字母后的字符
- cypress - 如何在 Cypress 中等待注入脚本?
- javascript - 无需身份验证 (JavaScript) 从 Google Drive 访问公共文本文件
- django - 在 django 中的 modelform 中添加确认密码字段,仅使用一个密码字段