diff --git a/src/_example/django/django_demo/.forestadmin-schema.json b/src/_example/django/django_demo/.forestadmin-schema.json index 254127190..e7a2bca1e 100644 --- a/src/_example/django/django_demo/.forestadmin-schema.json +++ b/src/_example/django/django_demo/.forestadmin-schema.json @@ -1,7 +1,240 @@ { "collections": [ { - "name": "Address", + "name": "address", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ + { + "defaultValue": null, + "enums": null, + "field": "city", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": true, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, + { + "type": "is shorter than", + "value": 255, + "message": null + } + ] + }, + { + "defaultValue": null, + "enums": null, + "field": "country", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": true, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, + { + "type": "is shorter than", + "value": 255, + "message": null + } + ] + }, + { + "defaultValue": null, + "enums": null, + "field": "customers", + "inverseOf": "addresses", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "customer.id", + "relationship": "BelongsToMany", + "type": [ + "String" + ], + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "flaskcustomersaddresses", + "inverseOf": "address", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "customers_addresses.id", + "relationship": "HasMany", + "type": [ + "Number" + ], + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "flaskorder", + "inverseOf": "billing_address", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "order.id", + "relationship": "HasMany", + "type": [ + "Number" + ], + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "id", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": true, + "isReadOnly": true, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "Number", + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "order_delivering_address_set", + "inverseOf": "delivering_address", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "order.id", + "relationship": "HasMany", + "type": [ + "Number" + ], + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "street", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": true, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, + { + "type": "is shorter than", + "value": 255, + "message": null + } + ] + }, + { + "defaultValue": null, + "enums": null, + "field": "street_number", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "String", + "validations": [ + { + "type": "is shorter than", + "value": 2, + "message": null + } + ] + }, + { + "defaultValue": null, + "enums": null, + "field": "zip_code", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": true, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, + { + "type": "is shorter than", + "value": 5, + "message": null + } + ] + } + ] + }, + { + "name": "app_address", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -13,7 +246,7 @@ "actions": [], "segments": [ { - "id": "Address.highOrderDelivery", + "id": "app_address.highOrderDelivery", "name": "highOrderDelivery" } ], @@ -29,7 +262,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Order.id", + "reference": "app_order.id", "relationship": "HasMany", "type": [ "Number" @@ -90,7 +323,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "CustomerAddress.id", + "reference": "app_customeraddress.id", "relationship": "HasMany", "type": [ "Number" @@ -108,7 +341,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Customer.id", + "reference": "app_customer.id", "relationship": "BelongsToMany", "type": [ "Number" @@ -126,7 +359,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Order.id", + "reference": "app_order.id", "relationship": "HasMany", "type": [ "Number" @@ -260,7 +493,7 @@ ] }, { - "name": "Cart", + "name": "app_cart", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -272,7 +505,7 @@ "actions": [], "segments": [ { - "id": "Cart.No order", + "id": "app_cart.No order", "name": "No order" } ], @@ -363,7 +596,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Order.id", + "reference": "app_order.id", "relationship": "BelongsTo", "type": "Number", "validations": [] @@ -371,7 +604,7 @@ ] }, { - "name": "ContentType", + "name": "app_customer", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -380,134 +613,13 @@ "onlyForRelationships": false, "paginationType": "page", "searchField": null, - "actions": [], - "segments": [], - "fields": [ + "actions": [ { - "defaultValue": null, - "enums": null, - "field": "app_label", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": true, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "String", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - }, - { - "type": "is shorter than", - "value": 100, - "message": null - } - ] - }, - { - "defaultValue": null, - "enums": null, - "field": "id", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "Number", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "logentry", - "inverseOf": "content_type", - "isFilterable": false, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": "LogEntry.id", - "relationship": "HasMany", - "type": [ - "Number" - ], - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "model", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": true, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "String", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - }, - { - "type": "is shorter than", - "value": 100, - "message": null - } - ] - }, - { - "defaultValue": null, - "enums": null, - "field": "permission", - "inverseOf": "content_type", - "isFilterable": false, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": "Permission.id", - "relationship": "HasMany", - "type": [ - "Number" - ], - "validations": [] - } - ] - }, - { - "name": "Customer", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [ - { - "id": "Customer-0-export json", + "id": "app_customer-0-export json", "name": "Export json", "type": "bulk", "baseUrl": null, - "endpoint": "/forest/_actions/Customer/0/export json", + "endpoint": "/forest/_actions/app_customer/0/export json", "httpMethod": "POST", "redirect": null, "download": true, @@ -520,11 +632,11 @@ } }, { - "id": "Customer-1-age operation", + "id": "app_customer-1-age operation", "name": "Age operation", "type": "single", "baseUrl": null, - "endpoint": "/forest/_actions/Customer/1/age operation", + "endpoint": "/forest/_actions/app_customer/1/age operation", "httpMethod": "POST", "redirect": null, "download": false, @@ -553,11 +665,11 @@ ], "segments": [ { - "id": "Customer.VIP customers", + "id": "app_customer.VIP customers", "name": "VIP customers" }, { - "id": "Customer.with french address", + "id": "app_customer.with french address", "name": "with french address" } ], @@ -589,7 +701,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Address.id", + "reference": "app_address.id", "relationship": "BelongsToMany", "type": [ "Number" @@ -671,7 +783,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "CustomerAddress.id", + "reference": "app_customeraddress.id", "relationship": "HasMany", "type": [ "Number" @@ -791,7 +903,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Order.id", + "reference": "app_order.id", "relationship": "HasMany", "type": [ "Number" @@ -809,7 +921,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Address.id", + "reference": "app_address.id", "relationship": "BelongsToMany", "type": [ "Number" @@ -827,7 +939,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Cart.id", + "reference": "app_cart.id", "relationship": "HasMany", "type": [ "Number" @@ -845,7 +957,7 @@ "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Address.id", + "reference": "app_address.id", "relationship": "BelongsToMany", "type": [ "Number" @@ -871,7 +983,7 @@ ] }, { - "name": "CustomerAddress", + "name": "app_customeraddress", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -894,7 +1006,7 @@ "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Address.id", + "reference": "app_address.id", "relationship": "BelongsTo", "type": "Number", "validations": [ @@ -916,7 +1028,7 @@ "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Customer.id", + "reference": "app_customer.id", "relationship": "BelongsTo", "type": "Number", "validations": [ @@ -946,7 +1058,7 @@ ] }, { - "name": "FlaskAddress", + "name": "app_order", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -955,40 +1067,152 @@ "onlyForRelationships": false, "paginationType": "page", "searchField": null, - "actions": [], - "segments": [], + "actions": [ + { + "id": "app_order-0-export json", + "name": "Export json", + "type": "global", + "baseUrl": null, + "endpoint": "/forest/_actions/app_order/0/export json", + "httpMethod": "POST", + "redirect": null, + "download": true, + "fields": [ + { + "field": "dummy field", + "value": "", + "defaultValue": "", + "description": "", + "enums": null, + "hook": null, + "isReadOnly": false, + "isRequired": false, + "reference": null, + "type": "String", + "widget": null + }, + { + "field": "customer", + "value": "", + "defaultValue": "", + "description": "", + "enums": null, + "hook": null, + "isReadOnly": false, + "isRequired": true, + "reference": "app_customer.id", + "type": "Number", + "widget": null + } + ], + "hooks": { + "load": false, + "change": [ + "changeHook" + ] + } + }, + { + "id": "app_order-1-refund order(s)", + "name": "Refund order(s)", + "type": "bulk", + "baseUrl": null, + "endpoint": "/forest/_actions/app_order/1/refund order(s)", + "httpMethod": "POST", + "redirect": null, + "download": false, + "fields": [ + { + "field": "reason", + "value": "", + "defaultValue": "", + "description": "", + "enums": null, + "hook": null, + "isReadOnly": false, + "isRequired": false, + "reference": null, + "type": "String", + "widget": null + } + ], + "hooks": { + "load": false, + "change": [ + "changeHook" + ] + } + } + ], + "segments": [ + { + "id": "app_order.Delivered order", + "name": "Delivered order" + }, + { + "id": "app_order.Dispatched order", + "name": "Dispatched order" + }, + { + "id": "app_order.Pending order", + "name": "Pending order" + }, + { + "id": "app_order.Rejected order", + "name": "Rejected order" + }, + { + "id": "app_order.Suspicious order", + "name": "Suspicious order" + }, + { + "id": "app_order.newly_created", + "name": "newly_created" + } + ], "fields": [ { "defaultValue": null, "enums": null, - "field": "city", - "integration": null, - "inverseOf": null, + "field": "billing_address", + "inverseOf": "billing_orders", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "String", + "reference": "app_address.id", + "relationship": "BelongsTo", + "type": "Number", "validations": [ { "type": "is present", "value": null, "message": null - }, - { - "type": "is shorter than", - "value": 255, - "message": null } ] }, { "defaultValue": null, "enums": null, - "field": "country", + "field": "cart", + "inverseOf": "order", + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "app_cart.id", + "relationship": "HasOne", + "type": "Number", + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "cost", "integration": null, "inverseOf": null, "isFilterable": true, @@ -998,7 +1222,7 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", + "type": "Number", "validations": [ { "type": "is present", @@ -1006,8 +1230,13 @@ "message": null }, { - "type": "is shorter than", - "value": 255, + "type": "is greater than", + "value": 0, + "message": null + }, + { + "type": "is greater than", + "value": 0, "message": null } ] @@ -1015,218 +1244,130 @@ { "defaultValue": null, "enums": null, - "field": "customers", - "inverseOf": "addresses", - "isFilterable": false, + "field": "created_at", + "integration": null, + "inverseOf": null, + "isFilterable": true, "isPrimaryKey": false, - "isReadOnly": false, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskCustomer.id", - "relationship": "BelongsToMany", - "type": [ - "String" - ], + "reference": null, + "type": "Date", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "flaskcustomersaddresses", - "inverseOf": "address", - "isFilterable": false, + "field": "customer", + "inverseOf": "orders", + "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskCustomersAddresses.id", - "relationship": "HasMany", - "type": [ - "Number" - ], + "reference": "app_customer.id", + "relationship": "BelongsTo", + "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "flaskorder", - "inverseOf": "billing_address", - "isFilterable": false, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": "FlaskOrder.id", - "relationship": "HasMany", - "type": [ - "Number" - ], - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "id", + "field": "customer_first_name", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "Number", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "order_delivering_address_set", - "inverseOf": "delivering_address", - "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskOrder.id", - "relationship": "HasMany", - "type": [ - "Number" - ], - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "street", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": true, - "isSortable": true, - "isVirtual": false, "reference": null, "type": "String", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - }, - { - "type": "is shorter than", - "value": 255, - "message": null - } - ] + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "street_number", + "field": "customer_full_name", "integration": null, "inverseOf": null, - "isFilterable": true, + "isFilterable": false, "isPrimaryKey": false, - "isReadOnly": false, + "isReadOnly": true, "isRequired": false, - "isSortable": true, + "isSortable": false, "isVirtual": false, "reference": null, "type": "String", - "validations": [ - { - "type": "is shorter than", - "value": 2, - "message": null - } - ] + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "zip_code", - "integration": null, - "inverseOf": null, + "field": "delivering_address", + "inverseOf": "delivering_orders", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "String", + "reference": "app_address.id", + "relationship": "BelongsTo", + "type": "Number", "validations": [ { "type": "is present", "value": null, "message": null - }, - { - "type": "is shorter than", - "value": 5, - "message": null } ] - } - ] - }, - { - "name": "FlaskCart", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [], - "segments": [], - "fields": [ + }, { "defaultValue": null, "enums": null, - "field": "created_at", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", + "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "id", + "field": "ordered_at", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", + "type": "Date", "validations": [] }, { "defaultValue": null, - "enums": null, - "field": "name", + "enums": [ + "PENDING", + "DISPATCHED", + "DELIVERED", + "REJECTED" + ], + "field": "status", "integration": null, "inverseOf": null, "isFilterable": true, @@ -1236,7 +1377,7 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", + "type": "Enum", "validations": [ { "type": "is present", @@ -1245,7 +1386,7 @@ }, { "type": "is shorter than", - "value": 255, + "value": 10, "message": null } ] @@ -1253,23 +1394,23 @@ { "defaultValue": null, "enums": null, - "field": "order", - "inverseOf": "flaskcart", + "field": "updated_at", + "integration": null, + "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, - "isReadOnly": false, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskOrder.id", - "relationship": "BelongsTo", - "type": "Number", + "reference": null, + "type": "Date", "validations": [] } ] }, { - "name": "FlaskCustomer", + "name": "auth_group", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -1284,16 +1425,16 @@ { "defaultValue": null, "enums": null, - "field": "addresses", - "inverseOf": "customers", + "field": "Group_permissions+", + "inverseOf": "group", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskAddress.id", - "relationship": "BelongsToMany", + "reference": "auth_group_permissions.id", + "relationship": "HasMany", "type": [ "Number" ], @@ -1302,55 +1443,41 @@ { "defaultValue": null, "enums": null, - "field": "age", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "Number", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "avatar", - "integration": null, - "inverseOf": null, + "field": "User_groups+", + "inverseOf": "group", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "String", + "reference": "auth_user_groups.id", + "relationship": "HasMany", + "type": [ + "Number" + ], "validations": [] }, { "defaultValue": null, "enums": null, - "field": "birthday_date", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", + "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "first_name", + "field": "name", "integration": null, "inverseOf": null, "isFilterable": true, @@ -1369,7 +1496,7 @@ }, { "type": "is shorter than", - "value": 255, + "value": 150, "message": null } ] @@ -1377,102 +1504,118 @@ { "defaultValue": null, "enums": null, - "field": "flaskcustomersaddresses", - "inverseOf": "customer", + "field": "permissions", + "inverseOf": "group", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskCustomersAddresses.id", - "relationship": "HasMany", + "reference": "auth_permission.id", + "relationship": "BelongsToMany", "type": [ - "String" + "Number" ], "validations": [] }, { "defaultValue": null, "enums": null, - "field": "flaskorder", - "inverseOf": "customer", + "field": "user", + "inverseOf": "groups", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskOrder.id", - "relationship": "HasMany", + "reference": "auth_user.id", + "relationship": "BelongsToMany", "type": [ - "String" + "Number" ], "validations": [] - }, + } + ] + }, + { + "name": "auth_group_permissions", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ { "defaultValue": null, "enums": null, - "field": "id", - "integration": null, - "inverseOf": null, - "isFilterable": false, - "isPrimaryKey": true, + "field": "group", + "inverseOf": "Group_permissions+", + "isFilterable": true, + "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "String", - "validations": [] + "reference": "auth_group.id", + "relationship": "BelongsTo", + "type": "Number", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "is_vip", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Boolean", + "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "last_name", - "integration": null, - "inverseOf": null, + "field": "permission", + "inverseOf": "Group_permissions+", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "String", + "reference": "auth_permission.id", + "relationship": "BelongsTo", + "type": "Number", "validations": [ { "type": "is present", "value": null, "message": null - }, - { - "type": "is shorter than", - "value": 255, - "message": null } ] } ] }, { - "name": "FlaskCustomersAddresses", + "name": "auth_permission", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -1487,76 +1630,43 @@ { "defaultValue": null, "enums": null, - "field": "address", - "inverseOf": "flaskcustomersaddresses", - "isFilterable": true, + "field": "Group_permissions+", + "inverseOf": "permission", + "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskAddress.id", - "relationship": "BelongsTo", - "type": "Number", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] + "reference": "auth_group_permissions.id", + "relationship": "HasMany", + "type": [ + "Number" + ], + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "customer", - "inverseOf": "flaskcustomersaddresses", - "isFilterable": true, + "field": "User_user_permissions+", + "inverseOf": "permission", + "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskCustomer.id", - "relationship": "BelongsTo", - "type": "String", + "reference": "auth_user_user_permissions.id", + "relationship": "HasMany", + "type": [ + "Number" + ], "validations": [] }, { "defaultValue": null, "enums": null, - "field": "id", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "Number", - "validations": [] - } - ] - }, - { - "name": "FlaskOrder", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [], - "segments": [], - "fields": [ - { - "defaultValue": null, - "enums": null, - "field": "amount", + "field": "codename", "integration": null, "inverseOf": null, "isFilterable": true, @@ -1566,92 +1676,55 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", + "type": "String", "validations": [ { "type": "is present", "value": null, "message": null + }, + { + "type": "is shorter than", + "value": 100, + "message": null } ] }, { "defaultValue": null, "enums": null, - "field": "billing_address", - "inverseOf": "flaskorder", - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": "FlaskAddress.id", - "relationship": "BelongsTo", - "type": "Number", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "created_at", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "Date", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "customer", - "inverseOf": "flaskorder", - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": "FlaskCustomer.id", - "relationship": "BelongsTo", - "type": "String", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "delivering_address", - "inverseOf": "order_delivering_address_set", + "field": "content_type", + "inverseOf": "permission", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "FlaskAddress.id", + "reference": "django_content_type.id", "relationship": "BelongsTo", "type": "Number", - "validations": [] + "validations": [ + { + "type": "is present", + "value": null, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "flaskcart", - "inverseOf": "order", + "field": "group", + "inverseOf": "permissions", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "FlaskCart.id", - "relationship": "HasMany", + "reference": "auth_group.id", + "relationship": "BelongsToMany", "type": [ "Number" ], @@ -1675,13 +1748,8 @@ }, { "defaultValue": null, - "enums": [ - "PENDING", - "DISPATCHED", - "DELIVERED", - "REJECTED" - ], - "field": "status", + "enums": null, + "field": "name", "integration": null, "inverseOf": null, "isFilterable": true, @@ -1691,7 +1759,7 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "Enum", + "type": "String", "validations": [ { "type": "is present", @@ -1700,15 +1768,33 @@ }, { "type": "is shorter than", - "value": 10, + "value": 255, "message": null } ] + }, + { + "defaultValue": null, + "enums": null, + "field": "user", + "inverseOf": "user_permissions", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "auth_user.id", + "relationship": "BelongsToMany", + "type": [ + "Number" + ], + "validations": [] } ] }, { - "name": "Group", + "name": "auth_user", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -1723,15 +1809,15 @@ { "defaultValue": null, "enums": null, - "field": "Group_permissions+", - "inverseOf": "group", + "field": "User_groups+", + "inverseOf": "user", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Group_permissions.id", + "reference": "auth_user_groups.id", "relationship": "HasMany", "type": [ "Number" @@ -1741,15 +1827,15 @@ { "defaultValue": null, "enums": null, - "field": "User_groups+", - "inverseOf": "group", + "field": "User_user_permissions+", + "inverseOf": "user", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "User_groups.id", + "reference": "auth_user_user_permissions.id", "relationship": "HasMany", "type": [ "Number" @@ -1759,42 +1845,37 @@ { "defaultValue": null, "enums": null, - "field": "id", + "field": "date_joined", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", + "type": "Date", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "name", + "field": "email", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, "type": "String", "validations": [ - { - "type": "is present", - "value": null, - "message": null - }, { "type": "is shorter than", - "value": 150, + "value": 254, "message": null } ] @@ -1802,76 +1883,43 @@ { "defaultValue": null, "enums": null, - "field": "permissions", - "inverseOf": "group", - "isFilterable": false, + "field": "first_name", + "integration": null, + "inverseOf": null, + "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Permission.id", - "relationship": "BelongsToMany", - "type": [ - "Number" - ], - "validations": [] + "reference": null, + "type": "String", + "validations": [ + { + "type": "is shorter than", + "value": 150, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "user", - "inverseOf": "groups", + "field": "groups", + "inverseOf": "user", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "User.id", + "reference": "auth_group.id", "relationship": "BelongsToMany", "type": [ "Number" ], "validations": [] - } - ] - }, - { - "name": "Group_permissions", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [], - "segments": [], - "fields": [ - { - "defaultValue": null, - "enums": null, - "field": "group", - "inverseOf": "Group_permissions+", - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": true, - "isSortable": true, - "isVirtual": false, - "reference": "Group.id", - "relationship": "BelongsTo", - "type": "Number", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] - }, + }, { "defaultValue": null, "enums": null, @@ -1889,72 +1937,25 @@ "validations": [] }, { - "defaultValue": null, + "defaultValue": true, "enums": null, - "field": "permission", - "inverseOf": "Group_permissions+", - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": true, - "isSortable": true, - "isVirtual": false, - "reference": "Permission.id", - "relationship": "BelongsTo", - "type": "Number", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] - } - ] - }, - { - "name": "LogEntry", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [], - "segments": [], - "fields": [ - { - "defaultValue": null, - "enums": [ - 1, - 2, - 3 - ], - "field": "action_flag", + "field": "is_active", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Enum", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] + "type": "Boolean", + "validations": [] }, { - "defaultValue": null, + "defaultValue": false, "enums": null, - "field": "action_time", + "field": "is_staff", "integration": null, "inverseOf": null, "isFilterable": true, @@ -1964,13 +1965,13 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", + "type": "Boolean", "validations": [] }, { - "defaultValue": null, + "defaultValue": false, "enums": null, - "field": "change_message", + "field": "is_superuser", "integration": null, "inverseOf": null, "isFilterable": true, @@ -1980,61 +1981,69 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", + "type": "Boolean", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "content_type", - "inverseOf": "logentry", + "field": "last_login", + "integration": null, + "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "ContentType.id", - "relationship": "BelongsTo", - "type": "Number", + "reference": null, + "type": "Date", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "id", + "field": "last_name", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", - "validations": [] + "type": "String", + "validations": [ + { + "type": "is shorter than", + "value": 150, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "object_id", - "integration": null, - "inverseOf": null, - "isFilterable": true, + "field": "logentry", + "inverseOf": "user", + "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "String", + "reference": "django_admin_log.id", + "relationship": "HasMany", + "type": [ + "Number" + ], "validations": [] }, { "defaultValue": null, "enums": null, - "field": "object_repr", + "field": "password", "integration": null, "inverseOf": null, "isFilterable": true, @@ -2053,7 +2062,7 @@ }, { "type": "is shorter than", - "value": 200, + "value": 128, "message": null } ] @@ -2061,29 +2070,52 @@ { "defaultValue": null, "enums": null, - "field": "user", - "inverseOf": "logentry", + "field": "user_permissions", + "inverseOf": "user", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "auth_permission.id", + "relationship": "BelongsToMany", + "type": [ + "Number" + ], + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "username", + "integration": null, + "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "User.id", - "relationship": "BelongsTo", - "type": "Number", + "reference": null, + "type": "String", "validations": [ { "type": "is present", "value": null, "message": null + }, + { + "type": "is shorter than", + "value": 150, + "message": null } ] } ] }, { - "name": "Order", + "name": "auth_user_groups", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -2092,122 +2124,21 @@ "onlyForRelationships": false, "paginationType": "page", "searchField": null, - "actions": [ - { - "id": "Order-0-export json", - "name": "Export json", - "type": "global", - "baseUrl": null, - "endpoint": "/forest/_actions/Order/0/export json", - "httpMethod": "POST", - "redirect": null, - "download": true, - "fields": [ - { - "field": "dummy field", - "value": "", - "defaultValue": "", - "description": "", - "enums": null, - "hook": null, - "isReadOnly": false, - "isRequired": false, - "reference": null, - "type": "String", - "widget": null - }, - { - "field": "customer", - "value": "", - "defaultValue": "", - "description": "", - "enums": null, - "hook": null, - "isReadOnly": false, - "isRequired": true, - "reference": "Customer.id", - "type": "Number", - "widget": null - } - ], - "hooks": { - "load": false, - "change": [ - "changeHook" - ] - } - }, - { - "id": "Order-1-refund order(s)", - "name": "Refund order(s)", - "type": "bulk", - "baseUrl": null, - "endpoint": "/forest/_actions/Order/1/refund order(s)", - "httpMethod": "POST", - "redirect": null, - "download": false, - "fields": [ - { - "field": "reason", - "value": "", - "defaultValue": "", - "description": "", - "enums": null, - "hook": null, - "isReadOnly": false, - "isRequired": false, - "reference": null, - "type": "String", - "widget": null - } - ], - "hooks": { - "load": false, - "change": [ - "changeHook" - ] - } - } - ], - "segments": [ - { - "id": "Order.Delivered order", - "name": "Delivered order" - }, - { - "id": "Order.Dispatched order", - "name": "Dispatched order" - }, - { - "id": "Order.Pending order", - "name": "Pending order" - }, - { - "id": "Order.Rejected order", - "name": "Rejected order" - }, - { - "id": "Order.Suspicious order", - "name": "Suspicious order" - }, - { - "id": "Order.newly_created", - "name": "newly_created" - } - ], + "actions": [], + "segments": [], "fields": [ { "defaultValue": null, "enums": null, - "field": "billing_address", - "inverseOf": "billing_orders", + "field": "group", + "inverseOf": "User_groups+", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Address.id", + "reference": "auth_group.id", "relationship": "BelongsTo", "type": "Number", "validations": [ @@ -2221,127 +2152,106 @@ { "defaultValue": null, "enums": null, - "field": "cart", - "inverseOf": "order", + "field": "id", + "integration": null, + "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Cart.id", - "relationship": "HasOne", + "reference": null, "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "cost", - "integration": null, - "inverseOf": null, + "field": "user", + "inverseOf": "User_groups+", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": null, + "reference": "auth_user.id", + "relationship": "BelongsTo", "type": "Number", "validations": [ { "type": "is present", "value": null, "message": null - }, - { - "type": "is greater than", - "value": 0, - "message": null - }, - { - "type": "is greater than", - "value": 0, - "message": null } ] - }, + } + ] + }, + { + "name": "auth_user_user_permissions", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ { "defaultValue": null, "enums": null, - "field": "created_at", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, + "isPrimaryKey": true, "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", + "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "customer", - "inverseOf": "orders", + "field": "permission", + "inverseOf": "User_user_permissions+", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Customer.id", + "reference": "auth_permission.id", "relationship": "BelongsTo", "type": "Number", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "customer_first_name", - "integration": null, - "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": null, - "type": "String", - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "customer_full_name", - "integration": null, - "inverseOf": null, - "isFilterable": false, - "isPrimaryKey": false, - "isReadOnly": true, - "isRequired": false, - "isSortable": false, - "isVirtual": false, - "reference": null, - "type": "String", - "validations": [] + "validations": [ + { + "type": "is present", + "value": null, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "delivering_address", - "inverseOf": "delivering_orders", + "field": "user", + "inverseOf": "User_user_permissions+", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Address.id", + "reference": "auth_user.id", "relationship": "BelongsTo", "type": "Number", "validations": [ @@ -2351,48 +2261,58 @@ "message": null } ] - }, + } + ] + }, + { + "name": "cart", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ { "defaultValue": null, "enums": null, - "field": "id", + "field": "created_at", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", + "type": "Date", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "ordered_at", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", + "type": "Number", "validations": [] }, { "defaultValue": null, - "enums": [ - "PENDING", - "DISPATCHED", - "DELIVERED", - "REJECTED" - ], - "field": "status", + "enums": null, + "field": "name", "integration": null, "inverseOf": null, "isFilterable": true, @@ -2402,7 +2322,7 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "Enum", + "type": "String", "validations": [ { "type": "is present", @@ -2411,7 +2331,7 @@ }, { "type": "is shorter than", - "value": 10, + "value": 255, "message": null } ] @@ -2419,23 +2339,23 @@ { "defaultValue": null, "enums": null, - "field": "updated_at", - "integration": null, - "inverseOf": null, + "field": "order", + "inverseOf": "flaskcart", "isFilterable": true, "isPrimaryKey": false, - "isReadOnly": true, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "Date", + "reference": "order.id", + "relationship": "BelongsTo", + "type": "Number", "validations": [] } ] }, { - "name": "Permission", + "name": "customer", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -2450,34 +2370,16 @@ { "defaultValue": null, "enums": null, - "field": "Group_permissions+", - "inverseOf": "permission", - "isFilterable": false, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": false, - "isSortable": true, - "isVirtual": false, - "reference": "Group_permissions.id", - "relationship": "HasMany", - "type": [ - "Number" - ], - "validations": [] - }, - { - "defaultValue": null, - "enums": null, - "field": "User_user_permissions+", - "inverseOf": "permission", + "field": "addresses", + "inverseOf": "customers", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "User_user_permissions.id", - "relationship": "HasMany", + "reference": "address.id", + "relationship": "BelongsToMany", "type": [ "Number" ], @@ -2486,90 +2388,55 @@ { "defaultValue": null, "enums": null, - "field": "codename", + "field": "age", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - }, - { - "type": "is shorter than", - "value": 100, - "message": null - } - ] - }, - { - "defaultValue": null, - "enums": null, - "field": "content_type", - "inverseOf": "permission", - "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, - "isRequired": true, - "isSortable": true, - "isVirtual": false, - "reference": "ContentType.id", - "relationship": "BelongsTo", "type": "Number", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "group", - "inverseOf": "permissions", + "field": "avatar", + "integration": null, + "inverseOf": null, "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Group.id", - "relationship": "BelongsToMany", - "type": [ - "Number" - ], + "reference": null, + "type": "String", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "id", + "field": "birthday_date", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", + "type": "Date", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "name", + "field": "first_name", "integration": null, "inverseOf": null, "isFilterable": true, @@ -2596,88 +2463,79 @@ { "defaultValue": null, "enums": null, - "field": "user", - "inverseOf": "user_permissions", + "field": "flaskcustomersaddresses", + "inverseOf": "customer", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "User.id", - "relationship": "BelongsToMany", + "reference": "customers_addresses.id", + "relationship": "HasMany", "type": [ - "Number" + "String" ], "validations": [] - } - ] - }, - { - "name": "Session", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [], - "segments": [], - "fields": [ + }, { "defaultValue": null, "enums": null, - "field": "expire_date", + "field": "flaskorder", + "inverseOf": "customer", + "isFilterable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "order.id", + "relationship": "HasMany", + "type": [ + "String" + ], + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "id", "integration": null, "inverseOf": null, - "isFilterable": true, - "isPrimaryKey": false, + "isFilterable": false, + "isPrimaryKey": true, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] + "type": "String", + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "session_data", + "field": "is_vip", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] + "type": "Boolean", + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "session_key", + "field": "last_name", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, + "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, @@ -2692,7 +2550,7 @@ }, { "type": "is shorter than", - "value": 40, + "value": 255, "message": null } ] @@ -2700,7 +2558,7 @@ ] }, { - "name": "User", + "name": "customers_addresses", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -2715,73 +2573,94 @@ { "defaultValue": null, "enums": null, - "field": "User_groups+", - "inverseOf": "user", - "isFilterable": false, + "field": "address", + "inverseOf": "flaskcustomersaddresses", + "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "User_groups.id", - "relationship": "HasMany", - "type": [ - "Number" - ], - "validations": [] + "reference": "address.id", + "relationship": "BelongsTo", + "type": "Number", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "User_user_permissions+", - "inverseOf": "user", - "isFilterable": false, + "field": "customer", + "inverseOf": "flaskcustomersaddresses", + "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "User_user_permissions.id", - "relationship": "HasMany", - "type": [ - "Number" - ], + "reference": "customer.id", + "relationship": "BelongsTo", + "type": "String", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "date_joined", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Date", + "type": "Number", "validations": [] - }, + } + ] + }, + { + "name": "django_admin_log", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ { "defaultValue": null, - "enums": null, - "field": "email", + "enums": [ + 1, + 2, + 3 + ], + "field": "action_flag", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", + "type": "Enum", "validations": [ { - "type": "is shorter than", - "value": 254, + "type": "is present", + "value": null, "message": null } ] @@ -2789,7 +2668,23 @@ { "defaultValue": null, "enums": null, - "field": "first_name", + "field": "action_time", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "Date", + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "change_message", "integration": null, "inverseOf": null, "isFilterable": true, @@ -2800,30 +2695,22 @@ "isVirtual": false, "reference": null, "type": "String", - "validations": [ - { - "type": "is shorter than", - "value": 150, - "message": null - } - ] + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "groups", - "inverseOf": "user", - "isFilterable": false, + "field": "content_type", + "inverseOf": "logentry", + "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Group.id", - "relationship": "BelongsToMany", - "type": [ - "Number" - ], + "reference": "django_content_type.id", + "relationship": "BelongsTo", + "type": "Number", "validations": [] }, { @@ -2843,9 +2730,9 @@ "validations": [] }, { - "defaultValue": true, + "defaultValue": null, "enums": null, - "field": "is_active", + "field": "object_id", "integration": null, "inverseOf": null, "isFilterable": true, @@ -2855,75 +2742,157 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "Boolean", + "type": "String", "validations": [] }, { - "defaultValue": false, + "defaultValue": null, + "enums": null, + "field": "object_repr", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": true, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, + { + "type": "is shorter than", + "value": 200, + "message": null + } + ] + }, + { + "defaultValue": null, + "enums": null, + "field": "user", + "inverseOf": "logentry", + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": true, + "isSortable": true, + "isVirtual": false, + "reference": "auth_user.id", + "relationship": "BelongsTo", + "type": "Number", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + } + ] + } + ] + }, + { + "name": "django_content_type", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ + { + "defaultValue": null, "enums": null, - "field": "is_staff", + "field": "app_label", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Boolean", - "validations": [] + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, + { + "type": "is shorter than", + "value": 100, + "message": null + } + ] }, { - "defaultValue": false, + "defaultValue": null, "enums": null, - "field": "is_superuser", + "field": "id", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, - "isReadOnly": false, + "isPrimaryKey": true, + "isReadOnly": true, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Boolean", + "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "last_login", - "integration": null, - "inverseOf": null, - "isFilterable": true, + "field": "logentry", + "inverseOf": "content_type", + "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": null, - "type": "Date", + "reference": "django_admin_log.id", + "relationship": "HasMany", + "type": [ + "Number" + ], "validations": [] }, { "defaultValue": null, "enums": null, - "field": "last_name", + "field": "model", "integration": null, "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, "reference": null, "type": "String", "validations": [ + { + "type": "is present", + "value": null, + "message": null + }, { "type": "is shorter than", - "value": 150, + "value": 100, "message": null } ] @@ -2931,25 +2900,40 @@ { "defaultValue": null, "enums": null, - "field": "logentry", - "inverseOf": "user", + "field": "permission", + "inverseOf": "content_type", "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "LogEntry.id", + "reference": "auth_permission.id", "relationship": "HasMany", "type": [ "Number" ], "validations": [] - }, + } + ] + }, + { + "name": "django_session", + "isVirtual": false, + "icon": null, + "isReadOnly": false, + "integration": null, + "isSearchable": true, + "onlyForRelationships": false, + "paginationType": "page", + "searchField": null, + "actions": [], + "segments": [], + "fields": [ { "defaultValue": null, "enums": null, - "field": "password", + "field": "expire_date", "integration": null, "inverseOf": null, "isFilterable": true, @@ -2959,46 +2943,45 @@ "isSortable": true, "isVirtual": false, "reference": null, - "type": "String", + "type": "Date", "validations": [ { "type": "is present", "value": null, "message": null - }, - { - "type": "is shorter than", - "value": 128, - "message": null } ] }, { "defaultValue": null, "enums": null, - "field": "user_permissions", - "inverseOf": "user", - "isFilterable": false, + "field": "session_data", + "integration": null, + "inverseOf": null, + "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": false, + "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Permission.id", - "relationship": "BelongsToMany", - "type": [ - "Number" - ], - "validations": [] + "reference": null, + "type": "String", + "validations": [ + { + "type": "is present", + "value": null, + "message": null + } + ] }, { "defaultValue": null, "enums": null, - "field": "username", + "field": "session_key", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": false, + "isPrimaryKey": true, "isReadOnly": false, "isRequired": true, "isSortable": true, @@ -3013,7 +2996,7 @@ }, { "type": "is shorter than", - "value": 150, + "value": 40, "message": null } ] @@ -3021,7 +3004,7 @@ ] }, { - "name": "User_groups", + "name": "order", "isVirtual": false, "icon": null, "isReadOnly": false, @@ -3036,16 +3019,16 @@ { "defaultValue": null, "enums": null, - "field": "group", - "inverseOf": "User_groups+", + "field": "amount", + "integration": null, + "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "Group.id", - "relationship": "BelongsTo", + "reference": null, "type": "Number", "validations": [ { @@ -3058,113 +3041,130 @@ { "defaultValue": null, "enums": null, - "field": "id", + "field": "billing_address", + "inverseOf": "flaskorder", + "isFilterable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": "address.id", + "relationship": "BelongsTo", + "type": "Number", + "validations": [] + }, + { + "defaultValue": null, + "enums": null, + "field": "created_at", "integration": null, "inverseOf": null, "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, "reference": null, - "type": "Number", + "type": "Date", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "user", - "inverseOf": "User_groups+", + "field": "customer", + "inverseOf": "flaskorder", "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "User.id", + "reference": "customer.id", "relationship": "BelongsTo", - "type": "Number", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] - } - ] - }, - { - "name": "User_user_permissions", - "isVirtual": false, - "icon": null, - "isReadOnly": false, - "integration": null, - "isSearchable": true, - "onlyForRelationships": false, - "paginationType": "page", - "searchField": null, - "actions": [], - "segments": [], - "fields": [ + "type": "String", + "validations": [] + }, { "defaultValue": null, "enums": null, - "field": "id", - "integration": null, - "inverseOf": null, + "field": "delivering_address", + "inverseOf": "order_delivering_address_set", "isFilterable": true, - "isPrimaryKey": true, - "isReadOnly": true, + "isPrimaryKey": false, + "isReadOnly": false, "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": null, + "reference": "address.id", + "relationship": "BelongsTo", "type": "Number", "validations": [] }, { "defaultValue": null, "enums": null, - "field": "permission", - "inverseOf": "User_user_permissions+", - "isFilterable": true, + "field": "flaskcart", + "inverseOf": "order", + "isFilterable": false, "isPrimaryKey": false, "isReadOnly": false, - "isRequired": true, + "isRequired": false, "isSortable": true, "isVirtual": false, - "reference": "Permission.id", - "relationship": "BelongsTo", - "type": "Number", - "validations": [ - { - "type": "is present", - "value": null, - "message": null - } - ] + "reference": "cart.id", + "relationship": "HasMany", + "type": [ + "Number" + ], + "validations": [] }, { "defaultValue": null, "enums": null, - "field": "user", - "inverseOf": "User_user_permissions+", + "field": "id", + "integration": null, + "inverseOf": null, + "isFilterable": true, + "isPrimaryKey": true, + "isReadOnly": true, + "isRequired": false, + "isSortable": true, + "isVirtual": false, + "reference": null, + "type": "Number", + "validations": [] + }, + { + "defaultValue": null, + "enums": [ + "PENDING", + "DISPATCHED", + "DELIVERED", + "REJECTED" + ], + "field": "status", + "integration": null, + "inverseOf": null, "isFilterable": true, "isPrimaryKey": false, "isReadOnly": false, "isRequired": true, "isSortable": true, "isVirtual": false, - "reference": "User.id", - "relationship": "BelongsTo", - "type": "Number", + "reference": null, + "type": "Enum", "validations": [ { "type": "is present", "value": null, "message": null + }, + { + "type": "is shorter than", + "value": 10, + "message": null } ] } @@ -3173,11 +3173,11 @@ ], "meta": { "liana": "agent-python", - "liana_version": "1.1.0", + "liana_version": "1.2.0-beta.2", "stack": { "engine": "python", "engine_version": "3.10.11" }, - "schemaFileHash": "a3bc8d0cbc9a4339c6b2fe0f9ca20c3df7d80f0d" + "schemaFileHash": "cb7254f309cce45b89e83eebc3302e86b1e42ead" } } \ No newline at end of file diff --git a/src/_example/django/django_demo/app/forest/order.py b/src/_example/django/django_demo/app/forest/order.py index 085ad29cc..426f09e71 100644 --- a/src/_example/django/django_demo/app/forest/order.py +++ b/src/_example/django/django_demo/app/forest/order.py @@ -110,7 +110,7 @@ async def execute_export_json(context: ActionContext, result_builder: ResultBuil }, { "type": ActionFieldType.COLLECTION, - "collection_name": "Customer", + "collection_name": "app_customer", "label": "customer", "is_required": True, "description": "", diff --git a/src/_example/django/django_demo/app/forest_admin.py b/src/_example/django/django_demo/app/forest_admin.py index a43e51730..33e83ff0b 100644 --- a/src/_example/django/django_demo/app/forest_admin.py +++ b/src/_example/django/django_demo/app/forest_admin.py @@ -44,9 +44,9 @@ def customize_forest(agent: DjangoAgent): # customize_forest_logging() # # ## ADDRESS - agent.customize_collection("Address").add_segment("highOrderDelivery", high_delivery_address_segment).rename_field( - "country", "pays" - ).add_field("full_address", address_full_name_computed("country")).rename_field( + agent.customize_collection("app_address").add_segment( + "highOrderDelivery", high_delivery_address_segment + ).rename_field("country", "pays").add_field("full_address", address_full_name_computed("country")).rename_field( "full_address", "complete_address" ).replace_field_sorting( "full_address", @@ -74,7 +74,7 @@ def customize_forest(agent: DjangoAgent): ) # cart - agent.customize_collection("Cart").add_field( + agent.customize_collection("app_cart").add_field( "customer_id", ComputedDefinition( column_type=PrimitiveType.NUMBER, @@ -98,7 +98,7 @@ def customize_forest(agent: DjangoAgent): # # ## CUSTOMERS # # import field ? - agent.customize_collection("Customer").add_field( + agent.customize_collection("app_customer").add_field( "age", { "column_type": PrimitiveType.NUMBER, @@ -160,14 +160,14 @@ def customize_forest(agent: DjangoAgent): ).add_many_to_many_relation( # relations "smart_billing_addresses", - "Address", - "Order", + "app_address", + "app_order", "customer_id", "billing_address_id", ).add_many_to_many_relation( - "smart_delivering_addresses", "Address", "Order", "customer_id", "delivering_address_id" + "smart_delivering_addresses", "app_address", "app_order", "customer_id", "delivering_address_id" ).add_one_to_many_relation( - "smart_carts", "Cart", "customer_id" + "smart_carts", "app_cart", "customer_id" ).add_hook( # hooks "Before", @@ -178,7 +178,7 @@ def customize_forest(agent: DjangoAgent): ) # # ## ORDERS - agent.customize_collection("Order").add_segment("Pending order", pending_order_segment).add_segment( + agent.customize_collection("app_order").add_segment("Pending order", pending_order_segment).add_segment( # segment "Delivered order", delivered_order_segment, diff --git a/src/datasource_django/forestadmin/datasource_django/collection.py b/src/datasource_django/forestadmin/datasource_django/collection.py index b00b48c6d..ad6ff5016 100644 --- a/src/datasource_django/forestadmin/datasource_django/collection.py +++ b/src/datasource_django/forestadmin/datasource_django/collection.py @@ -17,7 +17,7 @@ class DjangoCollection(BaseDjangoCollection): def __init__(self, datasource: Datasource, model: Model): - super().__init__(model.__name__, datasource) + super().__init__(model._meta.db_table, datasource) self._model = model schema = DjangoCollectionFactory.build(model) self.add_fields(schema["fields"]) diff --git a/src/datasource_django/forestadmin/datasource_django/utils/model_introspection.py b/src/datasource_django/forestadmin/datasource_django/utils/model_introspection.py index c95fdc2e4..e71ce4ec9 100644 --- a/src/datasource_django/forestadmin/datasource_django/utils/model_introspection.py +++ b/src/datasource_django/forestadmin/datasource_django/utils/model_introspection.py @@ -86,7 +86,7 @@ class DjangoCollectionFactory: @staticmethod def _build_one_to_many(relation: ManyToOneRel) -> Optional[OneToMany]: return { - "foreign_collection": relation.target_field.model.__name__, + "foreign_collection": relation.target_field.model._meta.db_table, "origin_key": relation.field.attname, "origin_key_target": relation.field.target_field.attname, "type": FieldType.ONE_TO_MANY, @@ -99,7 +99,7 @@ def _build_many_to_one(relation: Union[OneToOneField, ForeignKey, ManyToOneRel]) elif isinstance(relation, ForeignKey) or isinstance(relation, OneToOneField): foreign_key = relation.attname return { - "foreign_collection": relation.target_field.model.__name__, + "foreign_collection": relation.target_field.model._meta.db_table, "foreign_key": foreign_key, "foreign_key_target": relation.target_field.attname, "type": FieldType.MANY_TO_ONE, @@ -108,7 +108,7 @@ def _build_many_to_one(relation: Union[OneToOneField, ForeignKey, ManyToOneRel]) @staticmethod def _build_one_to_one(relation: OneToOneRel) -> OneToOne: return { - "foreign_collection": relation.target_field.model.__name__, + "foreign_collection": relation.target_field.model._meta.db_table, "origin_key": relation.field.attname, "origin_key_target": relation.field.target_field.attname, "type": FieldType.ONE_TO_ONE, @@ -117,14 +117,14 @@ def _build_one_to_one(relation: OneToOneRel) -> OneToOne: @staticmethod def _build_many_to_many(relation: Union[ManyToManyField, ManyToManyRel]) -> ManyToMany: kwargs: Dict[str, str] = {} - kwargs["foreign_collection"] = relation.target_field.model.__name__ + kwargs["foreign_collection"] = relation.target_field.model._meta.db_table if isinstance(relation, ManyToManyField): remote_field = relation.remote_field elif isinstance(relation, ManyToManyRel): # reverse relation remote_field = relation.field.remote_field - kwargs["through_collection"] = remote_field.through.__name__ + kwargs["through_collection"] = remote_field.through._meta.db_table for field in remote_field.through._meta.get_fields(): if field.is_relation is False: diff --git a/src/datasource_django/tests/__init__.py b/src/datasource_django/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/datasource_django/tests/test_django_datasource.py b/src/datasource_django/tests/test_django_datasource.py index 6ebfc9db1..b715f8e88 100644 --- a/src/datasource_django/tests/test_django_datasource.py +++ b/src/datasource_django/tests/test_django_datasource.py @@ -40,16 +40,16 @@ def test_django_datasource_should_find_all_models(self): set([c.name for c in datasource.collections]), set( [ - "Book", - "Person", - "Rating", - "Permission", - "Group_permissions", - "Group", - "User_groups", - "User_user_permissions", - "User", - "ContentType", + "test_app_book", + "test_app_person", + "test_app_rating", + "auth_permission", + "auth_group_permissions", + "auth_group", + "auth_user_groups", + "auth_user_user_permissions", + "auth_user", + "django_content_type", ] ), ) diff --git a/src/datasource_django/tests/utils/test_django_model_introspection.py b/src/datasource_django/tests/utils/test_django_model_introspection.py index 24b783078..f77b2a050 100644 --- a/src/datasource_django/tests/utils/test_django_model_introspection.py +++ b/src/datasource_django/tests/utils/test_django_model_introspection.py @@ -128,7 +128,7 @@ def test_build_should_handle_one_to_one_relations(self): self.assertEqual( restaurant_schema["fields"]["place"], { - "foreign_collection": "Place", + "foreign_collection": "test_app_place", "foreign_key": "place_id", "foreign_key_target": "id", "type": FieldType.MANY_TO_ONE, @@ -137,7 +137,7 @@ def test_build_should_handle_one_to_one_relations(self): self.assertEqual( places_schema["fields"]["restaurant"], { - "foreign_collection": "Restaurant", + "foreign_collection": "test_app_restaurant", "origin_key": "place_id", "origin_key_target": "id", "type": FieldType.ONE_TO_ONE, @@ -155,9 +155,9 @@ def test_build_should_handle_many_to_many_relations(self): user_schema["fields"]["groups"], { "type": FieldType.MANY_TO_MANY, - "foreign_collection": "Group", + "foreign_collection": "auth_group", "foreign_relation": None, - "through_collection": "User_groups", + "through_collection": "auth_user_groups", "origin_key": "user_id", "origin_key_target": "id", "foreign_key": "group_id", @@ -169,8 +169,8 @@ def test_build_should_handle_many_to_many_relations(self): group_schema["fields"]["user"], { "type": FieldType.MANY_TO_MANY, - "foreign_collection": "User", - "through_collection": "User_groups", + "foreign_collection": "auth_user", + "through_collection": "auth_user_groups", "foreign_relation": None, "foreign_key": "user_id", "foreign_key_target": "id", @@ -187,7 +187,7 @@ def test_build_should_handle_many_to_one_relations(self): self.assertEqual( user_groups_schema["fields"]["group"], { - "foreign_collection": "Group", + "foreign_collection": "auth_group", "foreign_key": "group_id", "foreign_key_target": "id", "type": FieldType.MANY_TO_ONE, @@ -200,7 +200,7 @@ def test_build_should_handle_one_to_many_relations(self): self.assertEqual( person_schema["fields"]["books"], { - "foreign_collection": "Book", + "foreign_collection": "test_app_book", "origin_key": "author_id", "origin_key_target": "id", "type": FieldType.ONE_TO_MANY, diff --git a/src/django_agent/tests/__init__.py b/src/django_agent/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000