【问题标题】:ORM data modeling in Python DjangoPython Django 中的 ORM 数据建模
【发布时间】:2015-12-20 09:34:14
【问题描述】:

我正在尝试在 Django 中创建数据模型,希望熟悉 Django ORM 的人提供帮助,以建议正确的方法来创建数据模型。

想法: 我想存储在社交媒体帖子中关联的主题标签列表。 1 个帖子可以有多个主题标签。

问题 1: 下面是上面模型的正确数据表示吗?

Hashtag table:
==============
 - hashtag_id (primary key)
 - hashtag_name

Post table:
============
 - Post_id (primary key)
 - Post_name

Hashtag-post link table:
=========================
 - hashtag_id (link to id in hashtag table, need to specify primary key?)
 - Post_id (link to id in post table)

问题 2: 如何使用正确的主键/外键创建 ORM 模型?

问题 3: 如何进行此查询:在 Django ORM 中查询主题标签中关联的所有帖子?

【问题讨论】:

  • 每个主题标签都应该有自己的帖子,与之相关联。最好在 Post -> Hashtag 中使用外键
  • 请参考Django官网this very useful page

标签: python mysql django orm


【解决方案1】:
  • 问题 1:上面模型的数据表示是否正确?

可以,但您不需要自己定义多对多表。 Django 为您完成。

如果您想为关系添加属性,则需要这样做,在这种情况下,您需要定义一个“直通表”。请read here了解更多信息。

  • 问题 2:如何使用正确的主键/外键创建 ORM 模型?

您的模型可能属于这种类型:

from django.db import models
class Hashtag(models.Model):
    name = models.CharField(max_length=80)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Post(models.Model):
    name = models.CharField(max_length=80)
    hashtags = models.ManyToManyField(Hashtag)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

再次重申:您不需要定义模型的主键,Django 会为您完成(如果需要,您仍然可以)。

Django 自动为模型添加一个id 字段,这是它的默认主键(也称为pk)。

  • 问题 3:如何进行此查询:在 Django ORM 中查询主题标签中关联的所有帖子?

以多种方式,例如:

Post.objects.filter(hastags__pk=1)
Post.objects.filter(hastags=1)
Post.objects.filter(hashtags=h1)  # where h1 is an hashtag object instance
Post.objects.filter(hashtags__name__startswith="Science")

请参考 Django 网站上的this very informative and useful page

还有 this one 关于跨关系的查询。

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多