【发布时间】:2020-07-04 09:02:29
【问题描述】:
我正在尝试为个人资料实施标记过程,以便您可以添加您的爱好。 我选择了 django-taggit,因为它看起来很简单,可以做我需要的事情,而且我真的不知道如何从头开始自己做。 我已经设法让它在某种程度上发挥作用,但我遇到了 3 件事:
- 我不太确定控制这些标签的表单字段的最佳方法是什么,因为我使用表单元功能中的小部件调整自动生成表单,但在解决以下两个问题后它可能会正常工作。
- 当没有字段爱好(标签)的数据时,该字段将填充一个值“[]”的标签,如下图所示。
- 当我添加“音乐”标签并在重新加载页面后提交表单时,我会根据图像得到这个“[]”。我以为图书馆会处理这件事,但我在网上看不到另一个类似的情况。
当我尝试添加另一个“游戏”标签并保存并重新加载时,会发生以下情况。初始值再次被包装。
我的模型是:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
hobbies = TaggableManager()
我的表格是:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['hobbies',]
def __init__(self, *args, **kwargs):
super(UserProfileForm, self).__init__(*args,**kwargs)
self.fields['hobbies'].widget = forms.TextInput()
self.fields['hobbies'].widget.attrs['data-role'] = "tagsinput"
self.fields['hobbies'].widget.attrs['class'] = "form-control"
self.fields['hobbies'].required = False
我的视图函数是:
if request.method == 'POST':
user_profile = UserProfile.objects.get(user=request.user)
form = UserProfileForm(request.POST, instance=user_profile)
print(form)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
print("Form valid")
form.save_m2m()
使用:
<script src="/static/js/tagsinput.js"></script>
<link rel="stylesheet" href="{% static 'css/tagsinput.css' %}" />
【问题讨论】:
-
您不能将
TextInput用作小部件,因为这将在值上使用str(..),因此列表确实会格式化为[..]。 -
@WillemVanOnsem 我使用 self.fields['hobbies'].widget = forms.TextInput() 作为标签字段。我还没有转向系统中已使用标签的自动完成功能。我正在努力正确显示数据并正确保存。因为我第二次添加新标签时,前一个标签被包装在另一个包装器中。将在问题中添加图片。
标签: python django django-forms tagging django-taggit