zoukankan      html  css  js  c++  java
  • 博客项目

    深浅coopy运用

    为什么在类中引用函数不用self 而是用类名调用

    
    def search_boutton(self,obj=None,header=False):
        if header:
      return "操作"
      else:
      url = reverse("%s_%s_update"%(self.app_name,self.table_name),args=[obj.pk,]) # 反向解析
      return mark_safe("<a href='%s'>编辑</a>" % url)
    
    
    
    
    
    def rebulid_display_list(self):
      tem=[]
      tem.append(ModelXadmin.checkbox_button) # 把选择框加到表头和表单前面,
      # 之所以用类,是因为在缺省形参中,如果调用一次,之后的参数都会发生改变,
      tem.extend(self.list_display) # 把实例化对象自身的数据加到tem当中
    
      if not self.list_display_link: # 是否传有link项
      tem.append(ModelXadmin.search_boutton)
      tem.append(ModelXadmin.delete_button) # 把选择框加到表头和表单前面,
      return tem

             这是因为函数中有缺省参数,如果 用self调用,就会指向自己的方法内,缺省参数有一次改变,之后的调用都是指向该值,即参数会改变,而函数则是不一样,他的缺省参数,默认的是原始值.

     ModelForm的补充

    ```
    def get_models_form(self):
    if not self.Model_Form_class:
    class Model_Form(ModelForm):
    class Meta:
    model = self.model
    fields = "__all__"
    labels = {
    ""
    }
    return Model_Form # 查看列表,即主页,并对相应字段配上路径
    else:
    return self.Model_Form_class
    ```
    # __str__,get_field,getattr
    __str __,当用getattr进行取值,默认返回对象内的__str __内返回值
    ```
    class Tag(models.Model):
    """
    标签
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32) # 标签名
    blog = models.ForeignKey(to="Blog", to_field="nid" ,on_delete=models.CASCADE) # 所属博客
    
    def __str__(self):
    return self.title
    
    class Meta:
    verbose_name = "标签"
    verbose_name_plural = verbose_name
    
     
    
    obj=models.Blog.objects.filter().first()
    getattr(obj,field)
    ---------------------------------
    结果是:
    self.title对应的值,因为双下划綫一定会执行的
    
    ```

           get_field(field _name)获取字段对应的对象,如title = models.CharField(max _length=32) ,我们获取到的是CharField实例化的对象,通过对象就可以拿到相应的参数值

    title_list.append(self.model._meta.get_field(field).verbose_name) #求字段中文


         getattr获取对象,或者模块当中相应的属性值,或者函数名,即反向解析字符串


     反向解析

    切记第二个参数是可迭代数据,因此否则会报错
    ```
    from django.urls import reverse
    def get_udate_url(self,obj):
    _url = reverse("%s_%s_update" % (self.app_name, self.table_name), args=[obj.pk, ]) # 反向解析
    return _url
    ```
    # 字符串标签安全布局
    ```
    from django.utils.safestring import mark_safe
    def checkbox_button(self,obj=None,header=False):
    if header:
    return mark_safe("<label><input type='checkbox' name='check' class='control_all'></label>")
    return mark_safe("<label><input type='checkbox' class='item_choice'></label>")
    ```
  • 相关阅读:
    python
    weui 问题
    Mac 问题
    ORM存储过程和实体类代码生成工具
    说说QQ空间SEO
    用户体验走嘴和走心的区别
    一切不以用户为中心的O2O 都是耍流氓
    10分钟制作自己的手机QQ
    一无所有其实没什么
    别人的鞋不一定合脚
  • 原文地址:https://www.cnblogs.com/AbnerLc/p/11191747.html
Copyright © 2011-2022 走看看