- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 slug 传递给表单,以便它可以将用户帐户与相关组(在该项目/上下文中称为“事件”)相匹配。 slug 是事件的标识符,它有多种类型的多对多连接到用户配置文件(标准 django 用户模型的扩展,专门用于将用户连接到事件)。
该表单应该创建两个下拉选择字段,让事件管理者设置任何其他用户在事件中拥有的权限,即作为被动观察者、编辑者或管理者。然而,截至目前,django 生成错误
'str' object has no attribute 'get'
渲染页面时。异常位于函数 value_from_datadict 中的 django/forms/widgets.py 中,错误被声明为位于基本模板 base 的第 0 行。 dashboard.html,在呈现期间发生。
我设法通过删除两个字段但保留 slug 以及删除候选字段和 slug 而保留权限字段完好无损来避免错误。我还尝试将传递的值显式转换为表单中的 slug(以防某些奇怪的动态类型使系统崩溃),但没有效果。
我错过了什么?
我正在使用 Python 3.9、Django 3.2.5 和 django-crispy-forms 1.13
views.py
@login_required
def members(request, slug):
current_event = Event.objects.get(slug=slug)
member_query = (Q(is_observer=current_event) | Q(is_editor=current_event) | Q(is_manager=current_event))
current_event_members = Profile.objects.filter(member_query)
if request.method == 'POST':
form = EventMemberForm(request.POST, current_event.slug)
if form.is_valid():
if form.membership_level and form.candidate:
target = Profile.objects.get(user__username=form.candidate)
if form.membership_level == "observer":
target.is_observer.add(current_event)
target.is_editor.remove(current_event)
target.is_manager.remove(current_event)
if form.membership_level == "editor":
target.is_observer.remove(current_event)
target.is_editor.add(current_event)
target.is_manager.remove(current_event)
if form.membership_level == "manager":
target.is_observer.remove(current_event)
target.is_editor.remove(current_event)
target.is_manager.add(current_event)
if form.membership_level == "remove":
target.is_observer.remove(current_event)
target.is_editor.remove(current_event)
target.is_manager.remove(current_event)
return HttpResponseRedirect("/e/list")
else:
form = EventMemberForm(current_event.slug)
args = {}
args.update({"event": current_event})
args.update({"event_members": current_event_members})
args.update({"form": form})
return render(request, "management/event_members.html", args)
表单.py
class EventMemberForm(forms.Form):
MEMBERSHIP_LEVELS = [
('observer', 'Observer'),
('editor', 'Editor'),
('manager', 'Manager')
]
membership_level = forms.ChoiceField(label='Permissions:', choices=MEMBERSHIP_LEVELS, required=False)
candidate = forms.ModelChoiceField(queryset=Profile.objects.none(), label="Candidate:", required=False)
class Meta:
fields = ['membership_level', 'candidate']
def __init__(self, *args, **kwargs):
super(EventMemberForm, self).__init__(*args, **kwargs)
selected_event = Event.objects.get(slug=args[0])
self.fields['candidate'].queryset = Profile.objects.filter((~Q(is_observer=selected_event) | ~Q(is_editor=selected_event)) | ~Q(is_manager=selected_event) & Q(user__is_active=1)).order_by("user__username")
模板 (event_members.html)
{% extends "base.dashboard.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
<h1 class="h2">Members in Event "{{ event.name }}"</h1>
<div class="btn-toolbar mb-2 mb-md-0">
<div class="btn-group me-2">
<a href="{% url 'Event_List' %}" class="btn btn-sm btn-outline-secondary">List of Events</a>
</div>
</div>
</div>
<h2>Members</h2>
{% if event_members|length > 0 %}
{% if request.user.profile.is_manager %}
{% if form.non_field_errors %}
<div class="alert alert-danger">
<a class="close" data-dismiss="alert">×</a>
{% for non_field_error in form.non_field_errors %}
{{ non_field_error }}
{% endfor %}
</div>
{% endif %}
<form role="form" action="{% url 'Event_Members' slug=event.slug %}" method="post">
{% csrf_token %}
<div class="form-group">
{{ form|crispy }}
<button type="submit" class="btn btn-sm btn-outline-secondary">Change permissions</button>
</div>
</form>
{% endif %}
<div class="table-responsive">
<table class="table table-striped table-sm">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Permissions</th>
</tr>
</thead>
<tbody>
{% for member in event_members %}
<tr>
<td><strong>{{ member.user.username }}</strong></td>
<td>
{% if member.is_manager %}
Manager
{% elif member.is_editor %}
Editor
{% elif member.is_observer %}
Observer
{% else %}
Error
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="alert alert-danger">Error: No members found. Contact an administrator!</div>
{% endif %}
{% endblock %}
models.py(配置文件)
class Profile(models.Model):
user = models.OneToOneField(User, related_name="profile", on_delete=models.CASCADE)
is_observer = models.ManyToManyField(Event, related_name="event_observer", blank=True)
is_editor = models.ManyToManyField(Event, related_name="event_editor", blank=True)
is_manager = models.ManyToManyField(Event, related_name="event_manager", blank=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
models.py(事件)
class Event(models.Model):
name = models.CharField(verbose_name="Name", max_length=50)
date = models.DateField(verbose_name="Starting Date (DD.MM.YYYY)")
description = models.TextField(verbose_name="Description")
slug = models.SlugField(max_length=10)
def __str__(self):
return str(self.name)
def save(self, *args, **kwargs):
if not self.id: # skip if event already exists
if get_or_none(Event, slug=slugify(self.name[:10])) is None: # check for duplicate slugs
self.slug = slugify(self.name[:10])
else: # iteratively append integer to slug candidates until an unused slug is found
i = 0
finished = False
while not finished:
slug_candidate = slugify((self.name[:10-len(str(i))] + str(i)))
if get_or_none(Event, slug=slug_candidate) is None:
self.slug = slug_candidate
finished = True
else:
i = i + 1
if get_or_none(Event, name=self.name): # check for duplicate name and generate new one if needed (compare above)
i = 0
finished = False
while not finished:
name_candidate = str(self.name[:50 - len(str(i))] + str(i))
if get_or_none(Event, name=name_candidate) is None:
self.name = name_candidate
finished = True
else:
i = i + 1
super(Event, self).save(*args, **kwargs)
最佳答案
问题源于使用自定义参数重载 form
。这必须在调用 super
函数之前从 kwargs
中删除。那是因为父类的 init
函数不知道这个额外的参数。
view.py
form = EventMemberForm(request.POST, slug=current_event.slug)
forms.py
class EventMemberForm(forms.Form):
...
def __init__(self, *args, **kwargs):
slug = kwargs.pop('slug', None)
super(EventMemberForm, self).__init__(*args, **kwargs)
selected_event = Event.objects.get(slug)
self.fields['candidate'].queryset = Profile.objects.filter((~Q(is_observer=selected_event) | ~Q(is_editor=selected_event)) | ~Q(is_manager=selected_event) & Q(user__is_active=1)).order_by("user__username")
关于python - "' str ' object has no attribute ' 将 slug 传递给 django 表单时得到 '",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70650780/
我仅使用 slug 来标识网站上的页面,例如: example.tld/view/this-fancy-slug 。这是使用此函数自动从标题生成的: public static function No
哪个是新闻页面上 url 的最佳选择: 动态生成 slug。从对象 ID 加载页面。如果 slug 不匹配,永久重定向到正确的 slug。 myweb.com/542/my-news-item 我看到
slug 是描述或标题页面的 URL 的一部分,通常是该页面的关键字丰富,可改善 SEO。例如在这个网址 PHP/JS - Create thumbnails on the fly or store
刚开始玩 Django,发现了一个链接 here关于如何创建 slug。我被告知对现有模型执行以下更改: from django.template.defaultfilters import slug
我有 2 个自定义帖子类型的帖子。视频帖子和城市指南帖子第一个帖子(视频帖子)包含 url:104.130.239.132/rick-owens/第二个帖子(城市指南)conatins url:htt
我正在创建一个需要 slug 系统的系统。例如,标题为“博客标题:此处”的博客文章的 URL 为: YYYY/MM/DD/the-blog-title-here 我的系统设置得很好,如果您的 URL
我已使用以下代码注册自定义帖子类型: register_post_type( array( 'labels' => // array o
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我刚刚安装了使用 Sluggable 的学说扩展。 我做这个: Composer .json "stof/doctrine-extensions-bundle": "1.2.*@dev" 应用内核.p
我在为一个私有(private)网站工作。我有 2 个表: 表 A(包含较旧的 slug)。 表 B(新 slug)。 这里的代码用于检查是否存在 slug 并从表 B(单表查询)创建唯一的 slug
我在我的项目中使用了 ui-router,我在文档中看到了两者: .state('app.restaurants.index', { url: '/{slug}', contr
CREATE TABLE news ( id int(11) NOT NULL AUTO_INCREMENT, title varchar (128) NOT NULL, sl
我想转换任何标题,例如一个用户友好的 url 的博客条目。我用了rawurlencode()这样做但它给了我很多奇怪的字符串,比如 %s。 该算法应考虑 Ö、Ä 等德语字符。我想从标题创建一个 url
我想捕获 URL 中的第一个 slug仅限 如果 URL 有一个 slug,如果它在 URL 中有多个 slug 或部分,则忽略它。例如: https://example.com/path/some-
我有一种情况,在 url 的底部我有一个动态 slug 来获取数据。现在我发现我需要一个静态 slug,这将表示一个不同的页面,但仍然可以访问基本动态 slug 以获取信息。 示例路径 /formAB
我正在开发一个简单的博客来学习 Django。我希望每个帖子都有一个这样的路径: /category-1/title-post /category-2/title-post etc.. 低于urls.
该网站非常简单,只有 3 页,主页和 urls.py 中显示的第二个 url 效果很好,但是当我从主题转到单元页面时,我得到: TypeError at /subjects/units/english
在我一直在开发的应用程序中,我遇到了像 /books/:slug, :to => 'books#show', slug:/.*?/ 这样的路由。我很好奇这部分的作用 slug:/.*?/ ? 最佳答案
我尝试使用此查询更改特定帖子的帖子别名: UPDATE wp_posts SET post_name = replace(post_name, 'make-me-happy','make-me-hap
我尝试使用 HarpJS,一个 NodeJS 静态博客生成器。在教程中有这样的元数据示例: for article, slug in public.articles._data a(href="/a
我是一名优秀的程序员,十分优秀!