Django自定义字段小部件和自定义“ListField”的小部件行为
我正在创建以下基于 基本上,我想要实现的是一个字段,在该字段中,您可以编写类似于1、asd、asdf fdgd的内容,它将其存储在数据库中,但在检索时,它应将该字符串作为数组返回,在给定数组时,它应将其转换回逗号分隔的字符串 我仍然不确定到目前为止我写的东西是否有效,但我无法将其显示为输入字段而不是文本区域,即使我设置了widget=TextInput 那么,如何使用标准字符域使用的相同输入在管理中显示它呢? 如何对其进行自定义,使其在此类输入上显示时显示逗号分隔的字符串,但在其他地方访问时作为Python列表返回Django自定义字段小部件和自定义“ListField”的小部件行为,django,model,field,Django,Model,Field,我正在创建以下基于 基本上,我想要实现的是一个字段,在该字段中,您可以编写类似于1、asd、asdf fdgd的内容,它将其存储在数据库中,但在检索时,它应将该字符串作为数组返回,在给定数组时,它应将其转换回逗号分隔的字符串 我仍然不确定到目前为止我写的东西是否有效,但我无法将其显示为输入字段而不是文本区域,即使我设置了widget=TextInput 那么,如何使用标准字符域使用的相同输入在管理中显示它呢? 如何对其进行自定义,使其在此类输入上显示时显示逗号分隔的字符串,但在其他地方访问时作为
谢谢以下是实现您所需的方法
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=256)
labels = models.TextField()
def get_labels(self):
return self.content.split('\n')
def set_labels(self,value):
if isinstance(value,list) or isinstance(value,tuple) or isinstance(value,set):
content = '\n'.join(value)
else:
content = value
self.content = content
可以将标签视为列表字段,使用obj.set_labelslist函数设置值,使用obj.get_标签获取值
它充当列表字段,管理站点将作为普通文本字段运行
这就是我所做的,但一个更好的解决办法除外
更好的方法是在admin.py中使用save_模型:
class BlogAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
# extra data handling, prevent data convert
obj.save()
我以前也遇到过同样的问题,每次保存时都会转换。因此,许多[和]在内容中,这是我遇到的问题。它在shell或views.py中工作,但在管理站点中不起作用,我没有找到更好的方法来解决这个问题,可能是一个转换函数而不是ListField,只需使用TextField或CharField,在models.py中读取、编写类的函数,例如get_content要将内容转换为列表,只需使用obj.get_content而不是obj.content。。。但是除了更好的答案之外,这可能会有所帮助,请替换\n使用分隔符
class BlogAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
# extra data handling, prevent data convert
obj.save()