【问题标题】:Django join two models in ListApiViewDjango 在 ListApiView 中加入两个模型
【发布时间】:2019-10-22 10:49:59
【问题描述】:

我使用 django rest api 列出了博客文章 查看.py

 class BlogDetail(generics.RetrieveUpdateDestroyAPIView):
        queryset = models.Blog.objects.all()
        serializer_class = serializers.BlogSerializer

模型.py

  class Blog(models.Model):
        title = models.CharField(max_length=50)
        content = models.TextField()
        content = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
        category_id = models.CharField(max_length=50)



class Category(models.Model):
    category_id = models.TextField()
    category_title = models.TextField()

序列化器.py

class BlogSerializer(serializers.ModelSerializer):

    class Meta:
        fields = ('id', 'title', 'content', 'created_at',)
        model = models.Blog

但我想列出博客及其子博客(类别)。如何加入类别和博客模型?这里的类别 id 在两个模型中很常见。

【问题讨论】:

  • Cart 型号是什么?
  • 它是类别模型
  • 请在 django 中阅读模型 relationship
  • 为什么将category_id 用作 CharField,而不是作为 Category 的 ForeignKey?

标签: python django django-rest-framework django-admin


【解决方案1】:

如果您的category_id 字段始终引用一个类别,您应该将其设为类别的外键。在您的示例中,它看起来与category_id 相关,即CharField。如果您希望它成为除主键之外的任何其他字段的外键,您可以指定to_field。请注意,此字段在 Category 模型上必须是唯一的。

class Category(models.Model):
    category_id = models.CharField(max_length=50, unique=True)
    category_title = models.TextField()

class Blog(models.Model):
    ...
    category = models.ForeignKey(Category, to_field='category_id', db_column='category_id')

您可以从那里通过外键从博客对象返回博客类别的任何详细信息

>>> blog_obj = Blog.objects.first()
>>> category_title = blog_obj.category.category_title

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多