簡體   English   中英

無法理解Django的外鍵和manytomany字段

[英]could not understand foreign key and manytomany field in django

我知道這是一個非常基本的問題。 我正在學習django,我看到最重要的部分是ForeignKey字段和ManyToManyField。 它們無處不在。 如果不了解這兩者,就無法設計合適的模型。 如果我必須設計一個具有FK關系的模型,則總是必須先看一下示例並嘗試提供解決方案。 我無法自信地設計模型,因為我對此不太了解。 如果有人讓我理解是非常棒的,以便讓我想到什么是FKField,如何用簡單的英語在表格中生成FKField和MTMField(語言是我從文檔中理解的障礙之一)。

這是外鍵的模型

class Category(models.Model):
  name = models.CharField()

class Product(models.Model):
  name = models.CharField()
  category = models.ForeignKeyField(Category, related_name="product")  

在django中,您可以將“變量”的一個實例作為表的一部分添加:這是一個ForeignKey。

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=30)
    category = models.ForeignKey(Category)

class Category(models.Model):
    name = models.CharField(max_length=30)

在這里,您將有一個名為“ [您的應用程序的名稱] _product”的SQL表,該表將具有兩列:“名稱”和“ category_id”。

您將有另一個名為“ [您的應用程序的名稱] _category”的表,其中將包含一個列“名稱”。

Django將知道,當您加載產品時,它必須獲取其category_id,然后從類別表中獲取該元素。

這是因為您使用外鍵:它是一個“變量”。 它是“多對一”的,因為您可以擁有具有相同類別的許多產品。

然后,您會看到“多對多”。 在這里,您可以有多個“變量”

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=30)
    category = models.ManyToManyField(Category)

class Category(models.Model):
    name = models.CharField(max_length=30)

在這里,不同之處在於,您將獲得一個名為“ [[NAME OF APPR]] _ product”的表,其中只有一列:“ name”。

在這旁邊,您將有一個表“ [您的應用程序的名稱] _product_category”,該表將具有“ product_id”和“ category_id”列。

最后一個表將是“ [NAME OF YOUR APP] _category”,其中將包含一列:“ name”。

它的工作方式是Django將獲得Product,並看到它具有Category的ManyToMany字段。

它將轉到“ [您的應用名稱] _product_category”,並獲取您所需的product_id的ID列表,然后從“ [[您的應用名稱]] _ category”獲取它們。

這是多對多的原因,因為您可以擁有很多具有不同類別的產品。

如果您仍然不理解,我將在本文中進行編輯以添加一個有關數據庫外觀的SQL示例。

(很抱歉,這不是很令人愉快的閱讀,並且不是解釋Django如何處理事情的真正廣泛的方法,但是我試圖做簡短的陳述。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM