models.ForeignKey(" ",on_delete=models.CASCADE)    # 关联外键

本文介绍了在Django模型中使用ForeignKey字段的方法,特别是如何正确地指定on_delete参数来避免版本更新后可能遇到的问题。同时,通过一个具体的例子展示了如何定义包含外键关联的模型。

    # 关联外键    

sgrade = models.ForeignKey("Grades",on_delete=models.CASCADE)

版本跟新后忘记加on_delete=models.CASCADE

报错困扰了很久 多读报错信息

from django.db import models

# Create your models here.
class Grades(models.Model):
    gname = models.CharField(max_length=20)
    gdate = models.DateTimeField()
    ggirlnum = models.IntegerField()
    gboynum = models.IntegerField()
    isDelete = models.BooleanField(default=False)
    def __str__(self):
        return self.gname
    class Meta:
        db_table = "grades"
#
class StudentsManager(models.Manager):
    def get_queryset(self):
        return super(StudentsManager,self).get_queryset().filter(isDelete=False)


class Students(models.Model):
    #自定义模型管理器
    #当自定义模型管理器,object就不存在了
    stuObj =models.Manager()
    stuObj2=StudentsManager()
    sname = models.CharField(max_length=20)
    sgender = models.BooleanField(default=True)
    sage = models.IntegerField(db_column='age')
    scontend = models.CharField(max_length=20)
    isDelete = models.BooleanField(default=False)
    #关联外键
    sgrade = models.ForeignKey("Grades",on_delete=models.CASCADE)
    def __str__(self):
        return self.sname
    # lastTime = models.DateTimeField(auto_created=True)
    # createTime = models.DateTimeField(auto_created=True)
    class Meta:
        db_table = "students"
        ordering = ['id']

 

from django.db import models from django.utils import timezone # Create your models here. class Groups(models.Model): group_name = models.CharField(verbose_name='角色', max_length=10) group_level = models.IntegerField(verbose_name='级别') def __str__(self): return self.group_name class Meta: db_table = "KN_Groups" verbose_name = "职位" verbose_name_plural = verbose_name class Users(models.Model): group = models.ForeignKey(Groups, on_delete=models.CASCADE, verbose_name='角色') user_account = models.CharField(verbose_name='用户名', max_length=20) user_password = models.CharField(verbose_name='密码', max_length=100) user_name = models.CharField(verbose_name='姓名', max_length=10, default='') user_age = models.IntegerField(verbose_name='年龄', default=20) register_date = models.DateTimeField(verbose_name='注册时间', auto_now_add=True) # 建议去掉引号 'true' last_login_date = models.DateTimeField(verbose_name='最后登录', null=True) is_active = models.BooleanField(verbose_name='激活状态', default=True) def __str__(self): return self.user_name class Meta: db_table = "KN_Users" verbose_name = "用户" verbose_name_plural = verbose_name class UsersMac(models.Model): user = models.ForeignKey(Users, on_delete=models.CASCADE, verbose_name='用户') mac = models.CharField(verbose_name='mac地址', max_length=40) def __str__(self): return self.user.user_name # 修复:原为 self.user_name 可能为空 class Meta: db_table = "KN_UsersMac" verbose_name = "用户Mac" verbose_name_plural = verbose_name # 新增:单位/公司模型(假设 Machine 关联到单位) class Company(models.Model): name = models.CharField(verbose_name='单位名称', max_length=100) def __str__(self): return self.name class Meta: db_table = "KN_Company" # 或根据实际表结构调整 verbose_name = "单位" verbose_name_plural = verbose_name # 新增:机器码模型(关!) class Machine(models.Model): campany = models.ForeignKey(Company, on_delete=models.CASCADE, verbose_name='申请单位') # 注意字段名是 campany mac = models.CharField(verbose_name='机器码', max_length=40) is_active = models.BooleanField(verbose_name='激活状态', default=False) authorized_time = models.DateTimeField(verbose_name='授权时间', null=True, blank=True) def __str__(self): return f"{self.mac} ({'已激活' if self.is_active else '未激活'})" class Meta: db_table = "kn_machine" # 必须与数据库表名一致 verbose_name = "机器码" verbose_name_plural = verbose_name 优化以上代码,将KN_company改成KN_Groups,能授权的人就是能删除机器码的人,优化后的代码是什么
10-23
from django.db import models # Create your models here. class Groups(models.Model): group_name = models.CharField(verbose_name='角色', max_length=10) group_level = models.IntegerField(verbose_name='级别') def __str__(self): return self.group_name class Meta: db_table = "KN_Groups" verbose_name = "职位" verbose_name_plural = verbose_name class Users(models.Model): # user_id = models.IntegerField(verbose_name='用户id', primary_key=True) group = models.ForeignKey(Groups, on_delete=models.CASCADE, verbose_name='角色') user_account = models.CharField(verbose_name='用户名', max_length=20) user_password = models.CharField(verbose_name='密码', max_length=100) user_name = models.CharField(verbose_name='姓名', max_length=10, default='') user_age = models.IntegerField(verbose_name='年龄', default=20) register_date = models.DateTimeField(verbose_name='注册时间', auto_now_add='true') last_login_date = models.DateTimeField(verbose_name='最后登录', null=True) is_active = models.BooleanField(verbose_name='激活状态', default=True) # group_id = models.IntegerField(verbose_name='职位id') def __str__(self): return self.user_name class Meta: db_table = "KN_Users" verbose_name = "用户" verbose_name_plural = verbose_name class UsersMac(models.Model): # user_id = models.IntegerField(verbose_name='用户id', primary_key=True) user = models.ForeignKey(Users, on_delete=models.CASCADE, verbose_name='用户') mac = models.CharField(verbose_name='mac地址', max_length=40) def __str__(self): return self.user_name class Meta: db_table = "KN_UsersMac" verbose_name = "用户Mac" verbose_name_plural = verbose_name 解释以上代码,什么意思,实现什么功能
最新发布
10-23
class Goods(models.Model): """ 商品 """ category = models.ForeignKey(GoodsCategory, verbose_name="商品类目",on_delete = models.CASCADE,) goods_sn = models.CharField(max_length=50, default="", verbose_name="商品唯一货号") name = models.CharField(max_length=100, verbose_name="商品名") click_num = models.IntegerField(default=0, verbose_name="点击数") sold_num = models.IntegerField(default=0, verbose_name="商品销售量") fav_num = models.IntegerField(default=0, verbose_name="收藏数") goods_num = models.IntegerField(default=0, verbose_name="库存数") market_price = models.FloatField(default=0, verbose_name="市场价格") shop_price = models.FloatField(default=0, verbose_name="本店价格") goods_brief = models.TextField(max_length=500, verbose_name="商品简短描述") goods_desc = UEditorField(verbose_name=u"内容", imagePath="goods/images/", width=1000, height=300, filePath="goods/files/", default='') ship_free = models.BooleanField(default=True, verbose_name="是否承担运费") goods_front_image = models.ImageField(upload_to="goods/images/", null=True, blank=True, verbose_name="封面图") is_new = models.BooleanField(default=False, verbose_name="是否新品")#新品会呈现在主页中间 is_hot = models.BooleanField(default=False, verbose_name="是否热销")#热销品会呈现右侧 add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")这个是主表 goods = models.ForeignKey(Goods, verbose_name="商品", related_name="images",on_delete = models.CASCADE,) image = models.ImageField(upload_to="", verbose_name="图片", null=True, blank=True) add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")这个是从表 从表的goods是主表的,他与主表的那个字段 对应,没有说明
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络毒刘

授人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值