EAV-Django

Phần mềm chụp màn hình:
EAV-Django
Các chi tiết về phần mềm:
Phiên bản: 1.4.4
Ngày tải lên: 14 Apr 15
Nhà phát triển: Andrey Mikhaylenko
Giấy phép: Miễn phí
Phổ biến: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django là một ứng dụng Django tái sử dụng mà cung cấp một thực hiện các mô hình dữ liệu Entity-Attribute-Value.
& Nbsp; mô hình Entity-Attribute-Value (EAV), còn được gọi là mô hình đối tượng thuộc tính-giá trị và giản đồ mở được sử dụng trong trường hợp số lượng các thuộc tính (tính năng, thông số) có thể được sử dụng để mô tả một điều (một " thực thể "hay" đối tượng ") là có tiềm năng rất lớn, nhưng số lượng đó sẽ thực sự được áp dụng cho một thực thể nhất định là tương đối khiêm tốn.
EAV-Django hoạt động tốt với RDBMS truyền thống (thử nghiệm trên SQLite và MySQL).
Ưu tiên
Ứng dụng này đã tăng từ một dự án cửa hàng trực tuyến, do đó, nó là khá thực tế và không chỉ là một bài tập học tập. Các ưu tiên chính là:
& Nbsp; 1. linh hoạt của dữ liệu,
& Nbsp; 2. hiệu quả của các truy vấn, và
& Nbsp; 3. bảo trì tối đa mà không cần chỉnh sửa mã.
Tất nhiên điều này ngụ ý thương mại-off, và mục đích là để tìm sự kết hợp có hại nhất cho trường hợp tổng quát.
Tính năng
Tất cả các model được cung cấp là trừu tượng, tức là EAV-Django không lưu trữ bất kỳ thông tin trong các bảng riêng của mình. Thay vào đó, nó cung cấp một cơ sở cho mô hình của riêng bạn mà sẽ có hỗ trợ cho EAV ra khỏi hộp.
Các EAV API bao gồm:
& Nbsp; * Tạo / cập nhật / truy cập: trường hợp mô hình cung cấp API standart cho cả hai lĩnh vực "thực" và EAV thuộc tính. Sự trừu tượng, tuy nhiên, không đứng theo cách của bạn và cung cấp phương tiện để đối phó với những thứ cơ bản.
& Nbsp; * Truy vấn: BaseEntityManager bao gồm cách tiếp cận thống nhất trong bộ lọc () và không bao gồm () để truy vấn "thực" và EAV thuộc tính.
& Nbsp; * lược đồ tùy biến cho các thuộc tính.
& Nbsp; * Admin: tất cả các thuộc tính năng động, có thể được thể hiện và sửa đổi trong admin Django không có hoặc ít nỗ lực (sử dụng eav.admin.BaseEntityAdmin). Lược đồ có thể được chỉnh sửa riêng rẽ, như bình thường đối tượng mô hình Django.
& Nbsp; * Facets: tìm kiếm khía cạnh là một tính năng quan trọng của các cửa hàng trực tuyến, catalog, vv Về cơ bản, bạn sẽ cần một hình thức đại diện cho một tập hợp con của một số mô hình thuộc tính với các vật dụng và lựa chọn thích hợp để người dùng có thể lựa chọn các giá trị mong muốn của một số tài sản, trình hình thức và có được một danh sách các mục phù hợp. Trong trường hợp tổng quát django-lọc sẽ làm gì, nhưng nó sẽ không làm việc với EAV, vì vậy EAV-Django cung cấp một bộ công cụ hoàn chỉnh cho điều đó.
Ví dụ
Hãy xác định một mô hình EAV-thân thiện, tạo ra một thuộc tính EAV và xem cách ứng xử. By "EAV thuộc tính" Tôi có nghĩa là những người được lưu trữ trong cơ sở dữ liệu như các đối tượng riêng biệt nhưng truy cập và tìm kiếm trong một cách như thể chúng là các cột trong bảng của thực thể:
từ các mô hình nhập khẩu django.db
từ eav.models BaseEntity nhập khẩu, BaseSchema, BaseAttribute
lớp Fruit (BaseEntity):
& Nbsp; title = models.CharField (max_length = 50)
lớp Schema (BaseSchema):
& Nbsp; vượt qua
lớp attr (BaseAttribute):
& Nbsp; schema = models.ForeignKey (Schema, related_name = 'attrs')
# Trong Python:
# Định nghĩa các thuộc tính có tên là "màu"
>>> Color = Schema.objects.create (
... Title = 'Colour',
... Name = 'màu', # omit để cư / slugify từ tiêu đề
... Datatype = Schema.TYPE_TEXT
...)
# Tạo ra một thực thể
>>> E = Fruit.objects.create (title = 'Apple', color = 'xanh')
# Định nghĩa "thực" và EAV thuộc tính cùng một cách
>>> E.title
'Apple'
>>> E.colour
'Xanh'
>>> E.save () # giao dịch với các thuộc tính tự động EAV
# Danh sách các thuộc tính như trường hợp EAV attr
>>> E.attrs.all ()
[]
# Tìm kiếm bằng một thuộc tính EAV như thể nó là một trường phổ thông
>>> Fruit.objects.filter (color = 'vàng')
[]
# Tất cả các tra cứu hợp chất được hỗ trợ
>>> Fruit.objects.filter (colour__contains = 'hét')
[]
Lưu ý rằng chúng ta có thể truy cập, chỉnh sửa và màu sắc truy vấn như thể nó là một lĩnh vực Entity đúng, nhưng cùng một lúc, tên, loại hình và nó thậm chí tồn tại được xác định hoàn toàn bởi một trường hợp Schema. Một đối tượng Schema có thể được hiểu như là một lớp, và các đối tượng liên quan là attr trường hợp của mình. Nói cách khác, các đối tượng Schema là như CharField, IntegerField và như vậy, chỉ có định nghĩa về mức độ dữ liệu, không mã hóa cứng trong Python. Và họ có thể "khởi tạo" cho bất kỳ thực thể (trừ khi bạn đặt chế tùy chỉnh mà nằm ngoài khu vực EAV-Django của trách nhiệm).
Các tên của các thuộc tính được định nghĩa trong lược đồ liên quan. Điều này có thể dẫn đến những lo ngại rằng một khi một tên được thay đổi, đang đi để phá vỡ. Thực ra đây không phải là trường hợp như tên được chỉ trực tiếp sử dụng để tra cứu nhãn hiệu. Trong tất cả các trường hợp khác, tìm kiếm này được xây dựng không có tên mã hóa cứng, và các đối tượng được liên kết với nhau bởi EAV khóa chính, chứ không phải bằng tên. Những cái tên có mặt nếu hình thức, nhưng các hình thức đang được tạo ra tùy thuộc vào trạng thái hiện tại của siêu dữ liệu, vì vậy bạn có thể an toàn thay đổi tên của lược đồ. Những gì bạn có thể phá vỡ từ giao diện quản trị các loại là. Nếu bạn thay đổi kiểu dữ liệu của một lược đồ, tất cả các thuộc tính của nó sẽ vẫn như cũ nhưng sẽ sử dụng cột khác để lưu trữ các giá trị của họ. Khi bạn khôi phục lại các kiểu dữ liệu, các giá trị được lưu trữ trước đó có thể nhìn thấy một lần nữa.
Xem các bài kiểm tra cho các ví dụ.
Các kiểu dữ liệu
Cấu trúc siêu dữ liệu theo định hướng mở rộng linh hoạt nhưng ngụ ý một số thỏa hiệp. Một trong số đó là tăng số lượng câu lệnh JOIN (và, do đó, các truy vấn chậm hơn). Một là loại dữ liệu ít hơn. Về mặt lý thuyết, chúng ta có thể hỗ trợ tất cả các kiểu dữ liệu có sẵn cho một lưu trữ, nhưng trong thực tế nó sẽ có nghĩa là tạo ra nhiều cột cho mỗi thuộc tính chỉ với một vài được sử dụng - chính xác những gì chúng tôi đang cố gắng để tránh bằng cách sử dụng EAV. Đây là lý do tại sao EAV-Django chỉ hỗ trợ một số loại cơ bản (mặc dù bạn có thể mở rộng danh sách này nếu cần thiết):
& Nbsp; * Schema.TYPE_TEXT, một TextField;
& Nbsp; * Schema.TYPE_FLOAT, một FloatField;
& Nbsp; * Schema.TYPE_DATE, một DateField;
& Nbsp; * Schema.TYPE_BOOL, một NullBooleanField;
& Nbsp; * Schema.TYPE_MANY cho nhiều lựa chọn (tức là danh sách các giá trị).
Tất cả thuộc tính EAV được lưu trữ như các bản ghi trong một bảng với sự kết hợp độc đáo của các tài liệu tham khảo cho các đối tượng và lược đồ. (Entity được tham chiếu thông qua các khuôn khổ contenttypes, lược đồ được tham chiếu thông qua chính nước ngoài.) Nói cách khác, chỉ có thể có một thuộc tính có thực thể nhất định và giản đồ. Giản đồ này là một định nghĩa của thuộc tính. Các schema định nghĩa tên, chức danh, kiểu dữ liệu và một số tài sản khác áp dụng cho bất kỳ thuộc tính của lược đồ này. Khi chúng ta truy cập hoặc tìm kiếm các thuộc tính EAV, các máy móc EAV luôn luôn sử dụng lược đồ như các thuộc tính siêu dữ liệu. Tại sao? Bởi vì tên của thuộc tính được lưu trữ trong giản đồ có liên quan, và các giá trị được lưu trữ trong một cột của bảng thuộc tính. Chúng tôi không biết cột đó là cho đến khi chúng ta nhìn vào siêu dữ liệu.
Trong ví dụ trên, chúng tôi đã chỉ chơi với một thuộc tính văn bản. Tất cả loại khác cư xử giống hệt nhau ngoại trừ TYPE_MANY. Các many-to-many là một trường hợp đặc biệt vì nó liên quan đến một mô hình thêm cho sự lựa chọn. EAV-Django cung cấp một mô hình trừu tượng, nhưng đòi hỏi bạn phải xác định một mô hình cụ thể (ví dụ như Choice), và điểm đến nó từ các mô hình thuộc tính (khoá ngoại tức là đặt tên là "sự lựa chọn"). Mô hình lựa chọn cũng sẽ có điểm tại Schema. Kiểm tra các xét nghiệm cho một ví dụ

là gì mới trong phiên bản này:.

  • Tạo / cập nhật / truy cập: trường hợp mô hình cung cấp standart API cho cả & quot; thật & quot; các lĩnh vực và các thuộc tính EAV. Sự trừu tượng, tuy nhiên, không đứng theo cách của bạn và cung cấp phương tiện để đối phó với những thứ cơ bản.
  • Truy vấn: BaseEntityManager bao gồm cách tiếp cận thống nhất trong bộ lọc () và không bao gồm () để truy vấn & quot; thật & quot; và EAV thuộc tính.
  • lược đồ tùy biến cho các thuộc tính.
  • Admin: tất cả các thuộc tính năng động, có thể được thể hiện và sửa đổi trong admin Django không có hoặc ít nỗ lực (sử dụng eav.admin.BaseEntityAdmin). Lược đồ có thể được chỉnh sửa riêng rẽ, như bình thường đối tượng mô hình Django.
  • Facets: tìm kiếm khía cạnh là một tính năng quan trọng của các cửa hàng trực tuyến, catalog, vv Về cơ bản, bạn sẽ cần một hình thức đại diện cho một tập hợp con của một số mô hình thuộc tính với các vật dụng và lựa chọn thích hợp để người dùng có thể lựa chọn các giá trị mong muốn của một số tài sản, trình hình thức và có được một danh sách các mục phù hợp. Trong trường hợp tổng quát django-lọc sẽ làm gì, nhưng nó sẽ không làm việc với EAV, vì vậy EAV-Django cung cấp một bộ công cụ hoàn chỉnh cho điều đó.

Yêu cầu :

  • Python
  • Django

Phần mềm khác của nhà phát triển Andrey Mikhaylenko

Timetra
Timetra

14 Apr 15

Monk
Monk

14 May 15

Ý kiến ​​để EAV-Django

Bình luận không
Nhập bình luận
Bật hình ảnh!