models.Model 设置主键
时间: 2024-03-13 16:20:26 浏览: 24
在 Django 中,使用 `models.Model` 来定义模型类,其默认情况下会自动创建一个名为 `id` 的自增主键。如果需要自定义主键,可以在定义模型类时使用 `primary_key=True` 参数来指定某个字段作为主键,例如:
```python
from django.db import models
class MyModel(models.Model):
my_id = models.CharField(max_length=10, primary_key=True)
name = models.CharField(max_length=50)
```
上述代码中,`my_id` 字段被指定为主键,类型为 `CharField`,长度为 10。在使用这个模型类时,`my_id` 字段会被作为主键来使用。
相关问题
class Product(models.Model): # 商品id,主键,唯一,自增 pro_id = models.AutoField(primary_key=True) pro_p = models.IntegerField() pro_name = models.CharField(max_length=64) pro_addr = models.CharField(max_length=64) pro_intro = models.CharField(max_length=64) pro_img = models.ImageField() pro_deta = models.ImageField() pro_price = models.DecimalField(20, 2) pro_stock = models.IntegerField() pro_q = models.IntegerField(default=1) # 商品状态默认在售 pro_desc = models.TextField(null=True) # 店铺id,是外键 pro_store_id = models.ForeignKey(to="Store", on_delete=models.CASCADE) # 商品评价id,是外键 pro_rate_id = models.ForeignKey(to="Rate", to_field="rate_id", on_delete=models.CASCADE) # 与购物车表的关系是多对多 pro_cart = models.ManyToManyField(to="Cart") # 与订单表的关系是多对多 pro_orders = models.ManyToManyField(to="Orders") # 与店铺信息表的关系是一对一 pro_store = models.OneToOneField(to="Store",on_delete=models.CASCADE)报错:TypeError: getattr(): attribute name must be string
根据你提供的代码,报错出现在 `pro_price` 字段上的 `models.DecimalField(20, 2)` 上面。`DecimalField` 字段需要指定一个字符串参数作为第一个参数,用于表示最大位数和小数位数。修改该行代码为 `pro_price = models.DecimalField(max_digits=20, decimal_places=2)` 即可解决问题。
修正后的代码如下:
```python
class Product(models.Model):
# 商品id,主键,唯一,自增
pro_id = models.AutoField(primary_key=True)
pro_p = models.IntegerField()
pro_name = models.CharField(max_length=64)
pro_addr = models.CharField(max_length=64)
pro_intro = models.CharField(max_length=64)
pro_img = models.ImageField()
pro_deta = models.ImageField()
pro_price = models.DecimalField(max_digits=20, decimal_places=2)
pro_stock = models.IntegerField()
pro_q = models.IntegerField(default=1) # 商品状态默认在售
pro_desc = models.TextField(null=True)
# 店铺id,是外键
pro_store_id = models.ForeignKey(to="Store", on_delete=models.CASCADE)
# 商品评价id,是外键
pro_rate_id = models.ForeignKey(to="Rate", to_field="rate_id", on_delete=models.CASCADE)
# 与购物车表的关系是多对多
pro_cart = models.ManyToManyField(to="Cart")
# 与订单表的关系是多对多
pro_orders = models.ManyToManyField(to="Orders")
# 与店铺信息表的关系是一对一
pro_store = models.OneToOneField(to="Store", on_delete=models.CASCADE)
```
请注意,`max_digits` 表示允许的最大位数,包括整数部分和小数部分,而 `decimal_places` 表示小数的位数。根据你的需求,你可以相应地调整这两个参数的值。
# 定义购物车商品信息模型 class CartItem(models.Model): id = models.AutoField(primary_key=True) item = models.ForeignKey(Item, on_delete=models.CASCADE) cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='cart_items') quantity = models.IntegerField(default=1)
这段代码定义了一个名为 CartItem 的 Django Model 类,用于表示购物车中的商品信息。该模型有以下几个字段:
- id:是一个自增的主键字段,用于唯一标识每个购物车商品信息。
- item:是一个外键字段,表示购物车中的一个商品。该字段关联到 Item 模型,使用 on_delete 参数设置了级联删除,即当该商品被删除时,与之相关的所有购物车商品信息也会被删除。
- cart:是一个外键字段,表示购物车。该字段关联到 Cart 模型,使用 on_delete 参数设置了级联删除,即当该购物车被删除时,与之相关的所有购物车商品信息也会被删除。该字段使用了 related_name 参数,表示通过 Cart 模型可以访问到所有与之关联的购物车商品信息。
- quantity:是一个整数类型字段,表示购物车中该商品的数量,默认值为 1。
通过定义 CartItem 模型,我们可以在购物车中保存每个商品的数量和单价等信息,同时通过 Cart 模型和 Item 模型建立起多对多关系,来实现购物车和商品之间的关联。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)