django - 寻找 KeywordsField.save_form_data 的格式
问题描述
我有一个夹层项目,正在尝试更新博客条目上的关键字。我很难获得正确的格式来调用 KeywordsField.save_form_data 这会调用一个 js,该 js 将更新博客文章中的关键字。见下文:
来自 Messanine/generic/fields.py
class KeywordsField(BaseGenericRelation):
"""
Stores the keywords as a single string into the
``KEYWORDS_FIELD_NAME_string`` field for convenient access when
searching.
"""
default_related_model = "generic.AssignedKeyword"
fields = {"%s_string": CharField(editable=False, blank=True,
max_length=500)}
def __init__(self, *args, **kwargs):
"""
Mark the field as editable so that it can be specified in
admin class fieldsets and pass validation, and also so that
it shows up in the admin form.
"""
super(KeywordsField, self).__init__(*args, **kwargs)
self.editable = True
def formfield(self, **kwargs):
"""
Provide the custom form widget for the admin, since there
isn't a form field mapped to ``GenericRelation`` model fields.
"""
from mezzanine.generic.forms import KeywordsWidget
kwargs["widget"] = KeywordsWidget
return super(KeywordsField, self).formfield(**kwargs)
def save_form_data(self, instance, data):
"""
The ``KeywordsWidget`` field will return data as a string of
comma separated IDs for the ``Keyword`` model - convert these
into actual ``AssignedKeyword`` instances. Also delete
``Keyword`` instances if their last related ``AssignedKeyword``
instance is being removed.
"""
from mezzanine.generic.models import Keyword
related_manager = getattr(instance, self.name)
# Get a list of Keyword IDs being removed.
old_ids = [str(a.keyword_id) for a in related_manager.all()]
new_ids = data.split(",")
removed_ids = set(old_ids) - set(new_ids)
# Remove current AssignedKeyword instances.
related_manager.all().delete()
# Convert the data into AssignedKeyword instances.
if data:
data = [related_manager.create(keyword_id=i) for i in new_ids]
# Remove keywords that are no longer assigned to anything.
Keyword.objects.delete_unused(removed_ids)
super(KeywordsField, self).save_form_data(instance, data)
从我的观点.py
class PubForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['keywords']
def UpdatePub(request, slug):
blog_post = BlogPost.objects.get(id=slug)
if request.method == 'POST':
form = PubForm(request.POST)
if form.is_valid():
publish_date = datetime.datetime.now()
blog_post.status = CONTENT_STATUS_PUBLISHED
publish_date=publish_date
tags=form.cleaned_data['keywords']
blog_post.save()
KeywordsField.save_form_data(user,blog_post,tags)
return HttpResponseRedirect('/write/')
else:
form = PubForm(instance=blog_post)
return render(request, 'blog_my_pub.html', {'form' : form})
它抱怨“用户”字段没有“名称”属性。我已经为此参数尝试了许多不同的值,但无法弄清楚。任何帮助,将不胜感激。
感谢您的任何意见。
解决方案
推荐阅读
- javascript - 如何在 Material UI 表格分页中更改纸张样式
- python - 从多个 df 创建一个 df
- php - 在输出中打印分组数组键
- python-3.x - 使用 S3 boto3 和雪花连接器时的 ContextualVersionConflict
- jq - jq 如果条件匹配,需要打印 pod 名称
- libssh2 - 如何在 Windows 上编译 ssh2 以创建 32 位 libssh2.dll
- c# - 如何在 C# 中加快 indexof 的速度?
- spring-security - 使用 Springlets JPA 在 Spring Roo 中填充用户和角色
- keycloak - 设置 Keycloak 返回的访问令牌的范围
- python - 如何根据熊猫中的条件使用 to_csv 后仅使用一次标题?