往数据库中添加数据 在Teminal对数据库进行操作
-objects.all查找
-objects.first 获取表中对象(即一行)
-xxxx .order_set.all 反向查询 一般是从父程序查询子程序 即知道一个对象的具体属性xxxx 通过外键关联 反找出另一个表的数据
像最后的父子模型
#***(1)Returns all customers from customer table customers = Customer.objects.all() #(2)Returns first customer in table firstCustomer = Customer.objects.first() #(3)Returns last customer in table lastCustomer = Customer.objects.last() #(4)Returns single customer by name customerByName = Customer.objects.get(name='Peter Piper') #***(5)Returns single customer by name customerById = Customer.objects.get(id=4) #***(6)Returns all orders related to customer (firstCustomer variable set above) firstCustomer.order_set.all() #(7)***Returns orders customer name: (Query parent model values) order = Order.objects.first() parentName = order.customer.name #(8)***Returns products from products table with value of "Out Door" in category attribute products = Product.objects.filter(category="Out Door") #(9)***Order/Sort Objects by id leastToGreatest = Product.objects.all().order_by('id') greatestToLeast = Product.objects.all().order_by('-id') #(10) Returns all products with tag of "Sports": (Query Many to Many Fields) productsFiltered = Product.objects.filter(tags__name="Sports") ''' (11)Bonus Q: If the customer has more than 1 ball, how would you reflect it in the database? A: Because there are many different products and this value changes constantly you would most likly not want to store the value in the database but rather just make this a function we can run each time we load the customers profile ''' #Returns the total count for number of time a "Ball" was ordered by the first customer ballOrders = firstCustomer.order_set.filter(product__name="Ball").count() #Returns total count for each product orderd allOrders = {} for order in firstCustomer.order_set.all(): if order.product.name in allOrders: allOrders[order.product.name] += 1 else: allOrders[order.product.name] = 1 #Returns: allOrders: {'Ball': 2, 'BBQ Grill': 1} #RELATED SET EXAMPLE class ParentModel(models.Model): name = models.CharField(max_length=200, null=True) class ChildModel(models.Model): parent = models.ForeignKey(Customer) name = models.CharField(max_length=200, null=True) parent = ParentModel.objects.first() #Returns all child models related to parent parent.childmodel_set.all()
对于动态路由(正则):
-在path <>里面加入primary key <str:pk>
path('customer/<str:pk>/', views.customer,name='customer'),
-向函数里面传参数
def customer(request, pk):
对模板进行动态数据的输入和url路由
-{{ xxx }} 是模板里动态对数据的输入填充
其中值得注意的是在函数中对数据库取值时利用反向传参求得数据(父子模型) -在多项选择中过滤选项
order = customer.order_set.all()
<td>{{order.customer.name}}</td>
Dlivered = order.objects.filter(status='Dlivered') //status是html页面 dlivered是其中一个多项选择
-{% for i in date %} 可用于循环结构
href ="{% url 'customer' customer.id %}" id是用get传参数给customer的primary key
{% for customer in customers %} <tr> <td><a class="btn btn-sm btn-info" href="{% url 'customer' customer.id %}">View</a></td> <td>{{customer.name}}</td> <td>{{customer.phone}}</td> </tr> {% endfor %}
-{% url 'xxx' % } 用于url的跳转 <a href = "{ % url 'xxx' %}"></a> (其中xxx为url的name)
需要在url.py中在path后面加上name
path('',views.home,name='home'), path('products/',views.products,name='products'), path('customer/<str:pk>/', views.customer,name='customer'),
在html中的a标签里面的href属性设置跳转
<td> <a class="btn btn-sm btn-info" href="{% url'customer'customer.id%}"> Views </a> </td>