Python 添加标记:Django自定义表单小部件用于多个模型字段
我目前正在为Django创建自己的标签应用程序 以下是模型:Python 添加标记:Django自定义表单小部件用于多个模型字段,python,django,model,widget,tagging,Python,Django,Model,Widget,Tagging,我目前正在为Django创建自己的标签应用程序 以下是模型: class Tag(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) tags = models.ManyToManyField(Tag) 我为我的模型书创建了一个表单,并为标签输入创建了一个小部件: class B
class Tag(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
tags = models.ManyToManyField(Tag)
我为我的模型书
创建了一个表单,并为标签
输入创建了一个小部件:
class BookForm(ModelForm):
class Meta:
model = Book
fields = ('title', 'tags')
widgets = {
'tags': TagWidget
}
class TagWidget(Widget):
"""
Widget for Tag input fields.
"""
def render(self, name, value, attrs=None):
final_attrs = self.build_attrs(attrs, name=name)
final_attrs['class'] = 'tag-input'
options = []
# TODO the following tags should be assigned from the model directly
options.append('tag1');
options.append('tag2');
list_element = u'<ul%s>' % flatatt(final_attrs)
return mark_safe(list_element + '\n<li>' + (u'</li>\n<li>'.join(options)) + '</li>\n</ul>')
类图书格式(ModelForm):
类元:
模型=书
字段=('title','tags')
小部件={
“标记”:标记小部件
}
类标记小部件(小部件):
"""
用于标记输入字段的小部件。
"""
def render(自身、名称、值、属性=无):
final\u attrs=self.build\u attrs(attrs,name=name)
最终属性['class']=“标记输入”
选项=[]
#TODO应直接从模型中指定以下标记
options.append('tag1');
options.append('tag2');
列表元素=u'%flatatt(最终属性)
返回标记“安全”(列表元素+'\n'+(u' \n'.join(选项))+' \n'))
问题
options.append(…)
)mark_safe
)?我想把所有html代码放在其他地方(最好放在我的templates文件夹中)class TagWidget(Widget):
def __init__(self, initial_tags, *args, **kwargs)
self.initial_tags = initial_tags
super(TagWidget, self).__init__(*args, **kwargs)
# ...
widgets = {
'tags': TagWidget(initial_tags=('one', 'two', 'three'))
}
然后可以在self.initial\u标签中访问数据
class TagWidget(Widget):
def __init__(self, initial_tags, *args, **kwargs)
self.initial_tags = initial_tags
super(TagWidget, self).__init__(*args, **kwargs)
# ...
widgets = {
'tags': TagWidget(initial_tags=('one', 'two', 'three'))
}
然后可以在self.initial\u标签中访问数据
如何自动判断模型具有哪些标记<代码>初始标签=('1'、'2'、'3')必须根据分配给该标签的标签动态分配object@Alprender(self、name、value、attrs=None)如何自动判断模型具有哪些标记<代码>初始标签=('1'、'2'、'3')必须根据分配给该标签的标签动态分配object@Alprender(self,name,value,attrs=None)Tag.name应初始化为(unique=True,db_index=True)。Tag.name应初始化为(unique=True,db_index=True)。