gpt4 book ai didi

python - 夹层中的每个帖子有多个作者

转载 作者:行者123 更新时间:2023-11-28 20:47:13 28 4
gpt4 key购买 nike

如何在夹层中实现每篇博文有多个作者的可能性?

在我的特定情况下,我的博客文章将由多个人撰写。

==========================

@光击

感谢您的答复和电子邮件。我在 STDBY 上遇到了这个问题,因为我有其他更紧迫的事情需要在我的应用程序中处理。

我已经尝试过现场注入(inject)来定制其他问题,它们工作正常。

关于我问题中的问题;我确实尝试过使用 M2M 字段进行字段注入(inject),但它没有用。我没有收到错误,但它没有工作,至少没有像预期的那样工作,所以我决定处理其他问题,然后再回到这个问题上。顺便一提;我只进行了一次现场注入(inject),所以甚至可能是我在某处打字错误,绝对没有调试或重新考虑,因为我必须继续前进。

以下内容可能看起来 OOT,但请稍等!

好消息是,除其他事项外,我的应用程序还需要一些相当基本的工作流控制。我找到了 THIS SOLUTION开箱即用。是的!

我是从 Mezzanine Users Group 的一篇文章中了解到这个应用程序的我知道我在某个地方有哪个链接,但在我需要时永远找不到。请寻找它并继续阅读,因为它非常令人大开眼界。你还会了解到 Reny 给它起的名字确实是错误的,但我理解他,因为我也不会说英语,有时,当你翻译时很难想出正确的名字。 Reny 似乎是意大利人(只是一个疯狂的猜测!)而我是讲西类牙语的。我(现在)知道得更多,但“编辑器”可能是我会使用的名字。

同样,我还没有时间回到这个问题上,但是:

  • 它有效,这才是最重要的。我认为它可以做得更好或者我应该说通过创建更容易被开发人员使用代码中的权限并让最终用户使用这些权限(如果需要)。截至目前,您必须创建一个组来制作工作流“神奇”地发生了(阅读他的 README.md 了解更多信息)。
  • 同样,这只是一个想法。我什至没有查看代码细节。我添加了应用程序,然后添加了大约六行settings.py 瞧,它成功了!
  • 事情是这样的:我认为无论他在做什么(我只粗略地查看了他的代码)也可以这样做实现协作创作(看看他的 save_modeladmin.py 中 EditorBlogPostAdmin 类的方法)
  • 解决方案不会像我从他的代码中推断的那么简单但有件事告诉我这是正确的道路。

只是我的两分钱,但我希望在接下来的 2 周内回到这个问题并且(希望)记得回到这里

尽管如此,在尝试其他任何事情之前,我仍会再次深入研究此讨论。

非常感谢!!

最佳答案

不幸的是,没有办法用 Mezzanine 开箱即用地做到这一点。如果您查看带有 Mezzanine Blog app 的 BlogPost 模型类,您将看到以下内容:

class BlogPost(Displayable, Ownable, RichText, AdminThumbMixin):

事实证明,Ownable 的子类化是这里的重要因素。从 Blog 应用程序的 models.py 文件的第 6 行,我们知道 Ownable 类是从 Mezzanine 的核心应用程序导入的:

class Ownable(models.Model):
"""
Abstract model that provides ownership of an object for a user.
"""

user = models.ForeignKey(user_model_name, verbose_name=_("Author"),
related_name="%(class)ss")

class Meta:
abstract = True

def is_editable(self, request):
"""
Restrict in-line editing to the objects's owner and superusers.
"""
return request.user.is_superuser or request.user.id == self.user_id

由于Ownable 定义了ForeignKey 关系,因此可以有多个Ownable 对象与单个User 对象关联,但多个User 对象不能与单个Ownable 对象关联。由于 BlogPost 的作者是以这种方式定义的,因此每篇博文只能有一位作者。

为了允许每个博客帖子有多个作者,您需要创建一个多对多 (M2M) 字段,以便多个用户对象可以与单个 BlogPost 对象相关联。要实现这一点,不涉及更改 Mezzanine 源代码的最佳选择是通过子类化 BlogPost 创建自定义博客模型:

你的应用/models.py
from django.db import models
from mezzanine.utils.models import get_user_model_name
from mezzanine.blog.models import BlogPost

user_model_name = get_user_model_name()

class CollaborativeBlogPost(BlogPost):
"""
Custom model that subclasses Mezzanine's BlogPost to allow multiple authors
"""
authors = models.ManyToManyField(user_model_name)

def is_editable(self, request):
"""
Customize is_editable method originally defined in Mezzanine's
Ownable class to allow editing by all users
"""
return request.user.is_superuser or
request.user.id in self.authors.all().values_list('id', flat=True)

您还需要将新的协作博客文章添加到您的管理员。使用来自 Mezzanine's field injection documentation 的一些指针(我最初想建议,但在使用 ManyToManyFields 创建南向迁移时存在一些问题),您可以复制基本的 BlogPost 管理员并添加作者字段:

你的应用/admin.py
from copy import deepcopy
from django.contrib import admin
from mezzanine.blog.admin import BlogPostAdmin
from mezzanine.blog.models import BlogPost
from .models import CollaborativeBlogPost

blog_fieldsets = deepcopy(BlogPostAdmin.fieldsets)
blog_fieldsets[0][1]["fields"].insert(-2, "authors")

class MyBlogPostAdmin(BlogPostAdmin):
fieldsets = blog_fieldsets

admin.site.register(CollaborativeBlogPost, MyBlogPostAdmin)

根据您的需要,您可能需要添加更多管理逻辑,但希望这能让您入门。

关于python - 夹层中的每个帖子有多个作者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19354376/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com