我在博客中有一个文章模型。
class Article(models.Model):
number = models.IntegerField()
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=100, unique=True, editable=False)
pub_date = models.DateTimeField(auto_now_add=True)
cut_text = models.TextField(blank=True, editable=False)
text = models.TextField()
tags = models.ManyToManyField(Tag, blank=True)
我想在admin中使用TextInput for Tags。所以我使用名为TagManager的jQuery插件实现了ModelForm。
class ArticleAdminForm(forms.ModelForm):
tags = forms.CharField(required=False, widget=widgets.TextInput(attrs={'name': 'tags',
'class': 'tm-input'}))
def clean_tags(self):
tags = self.data.get('hidden-tags')
clean_tags = []
tags = [tag for tag in tags.split(',') if tags]
for tag_name in tags:
tag, created = Tag.objects.get_or_create(name=tag_name)
tag.save()
clean_tags.append(tag)
return clean_tags
class Media:
css = {
'all': ('css/admin.css', 'css/tagmanager.css'),
}
js = ('js/jquery-2.0.3.js', 'js/tagmanager.js', 'js/admin.js')
class Meta:
model = Article
这一切都运行得很好,但现在我想知道使用clean函数创建模型对象还是有更好的方法可以做到这一点?