<tfoot id='kHN8x'></tfoot>

      <i id='kHN8x'><tr id='kHN8x'><dt id='kHN8x'><q id='kHN8x'><span id='kHN8x'><b id='kHN8x'><form id='kHN8x'><ins id='kHN8x'></ins><ul id='kHN8x'></ul><sub id='kHN8x'></sub></form><legend id='kHN8x'></legend><bdo id='kHN8x'><pre id='kHN8x'><center id='kHN8x'></center></pre></bdo></b><th id='kHN8x'></th></span></q></dt></tr></i><div id='kHN8x'><tfoot id='kHN8x'></tfoot><dl id='kHN8x'><fieldset id='kHN8x'></fieldset></dl></div>
        <bdo id='kHN8x'></bdo><ul id='kHN8x'></ul>
      <legend id='kHN8x'><style id='kHN8x'><dir id='kHN8x'><q id='kHN8x'></q></dir></style></legend>

    1. <small id='kHN8x'></small><noframes id='kHN8x'>

    2. django自定义Field实现一个字段存储以逗号分隔的字符串

      时间:2023-12-18
          <tbody id='SXyWH'></tbody>
      1. <i id='SXyWH'><tr id='SXyWH'><dt id='SXyWH'><q id='SXyWH'><span id='SXyWH'><b id='SXyWH'><form id='SXyWH'><ins id='SXyWH'></ins><ul id='SXyWH'></ul><sub id='SXyWH'></sub></form><legend id='SXyWH'></legend><bdo id='SXyWH'><pre id='SXyWH'><center id='SXyWH'></center></pre></bdo></b><th id='SXyWH'></th></span></q></dt></tr></i><div id='SXyWH'><tfoot id='SXyWH'></tfoot><dl id='SXyWH'><fieldset id='SXyWH'></fieldset></dl></div>

          <tfoot id='SXyWH'></tfoot>

          • <bdo id='SXyWH'></bdo><ul id='SXyWH'></ul>
            1. <small id='SXyWH'></small><noframes id='SXyWH'>

                <legend id='SXyWH'><style id='SXyWH'><dir id='SXyWH'><q id='SXyWH'></q></dir></style></legend>

                要实现一个以逗号分隔的字符串字段,可以使用Django的自定义Field来实现。

                步骤如下:

                1. 创建一个新的Django App

                首先要创建一个新的Django应用程序,例如 "comma_field"。

                使用以下命令创建:

                $ python manage.py startapp comma_field
                

                2. 定义一个CommaSeparatedField类

                在新创建的应用程序的 models.py 文件中,定义一个 CommaSeparatedField 类,继承自 Django 的 Field 类,然后实现 .db_type() 方法和 .to_python().get_prep_value() 方法。其中:

                • .db_type() 方法返回字段所使用的数据库类型,这里设为 VARCHAR(255)
                • .to_python() 将从数据库中获取的数据转换为Python对象;
                • .get_prep_value() 将Python对象转换为Django可用的值。
                from django.db import models
                
                class CommaSeparatedField(models.Field):
                
                    def db_type(self, connection):
                        return 'VARCHAR(255)'
                
                    def to_python(self, value):
                        if value is None:
                            return []
                        return [item.strip().lower() for item in value.split(',')]
                
                    def get_prep_value(self, value):
                        if value is None:
                            return None
                        return ','.join([str(s) for s in value])
                

                3. 在模型中使用

                在需要使用以逗号分隔的字符串字段的模型中,导入刚定义好的 CommaSeparatedField 类,然后在定义字段时直接使用 CommaSeparatedField 类。

                from django.db import models
                from comma_field.models import CommaSeparatedField
                
                class MyModel(models.Model):
                    my_field = CommaSeparatedField()
                    # 其他字段省略
                

                示例1. 字符串的写入和读取:

                obj = MyModel.objects.create(my_field='A, b, c, d')  # 写入
                assert obj.my_field == ['a', 'b', 'c', 'd']  # 读取
                

                示例2. 使用in查询操作符:

                如果需要使用 in 查询操作符的话,需要自定义过滤条件表达式,将整个字符串用逗号分割后,与某个值逐个比较。

                from django.db.models.lookups import Exact
                
                class CommaSeparatedExact(Exact):
                
                    def process_rhs(self, compiler, connection):
                        rhs, rhs_params = super().process_rhs(compiler, connection)
                        return "({})".format(','.join(["%s"] * len(rhs_params))), rhs_params
                
                MyModel.objects.filter(my_field__in=['a', 'c'], my_field__exact=CommaSeparatedExact('b'))  
                # SELECT * FROM myapp_mymodel WHERE my_field IN ('a', 'c') AND my_field = 'b'
                
                上一篇:django model 条件过滤 queryset.filter(**condtions)用法详解 下一篇:Python图像处理实现两幅图像合成一幅图像的方法【测试可用】

                相关文章

                  <bdo id='0xjqB'></bdo><ul id='0xjqB'></ul>
                <legend id='0xjqB'><style id='0xjqB'><dir id='0xjqB'><q id='0xjqB'></q></dir></style></legend>

              • <tfoot id='0xjqB'></tfoot>
                    <i id='0xjqB'><tr id='0xjqB'><dt id='0xjqB'><q id='0xjqB'><span id='0xjqB'><b id='0xjqB'><form id='0xjqB'><ins id='0xjqB'></ins><ul id='0xjqB'></ul><sub id='0xjqB'></sub></form><legend id='0xjqB'></legend><bdo id='0xjqB'><pre id='0xjqB'><center id='0xjqB'></center></pre></bdo></b><th id='0xjqB'></th></span></q></dt></tr></i><div id='0xjqB'><tfoot id='0xjqB'></tfoot><dl id='0xjqB'><fieldset id='0xjqB'></fieldset></dl></div>

                    <small id='0xjqB'></small><noframes id='0xjqB'>