如何使用Django管理(未经身份验证的)用户的“建议更改”?

时间:2015-04-29 08:08:29

标签: python django django-rest-framework

我有一个Django应用程序,用于与大约600个项目,1000个组织进行人道主义援助协调。

  • 用户将包括从事国际发展的IT专业人士,以及使用智能手机并且英语为第二或第三语言的农村地区的人。

  • 我们需要一种方法让用户告诉我们数据错误的位置并建议更正 - 这是一个 具有可怕拼写和大量陈旧联系的遗留数据库 细节。

  • 我不想要求用户身份验证,这将是一个 管理的噩梦。
  • 我不想拥有一个wiki类型的界面 直接与我的数据库交互,因为它太容易了 错误,故意或偶然。

我希望看到每个模型的“建议更改”页面,用户可以在其中提交建议,然后只需单击即可由管理员用户批准该数据。目前我正在开发一个涉及django REST框架的解决方案,保存序列化数据和管理员用户的URL以验证和提交,而不是实际更改实例。

有人可以推荐一种方法来实现这个,或者更好的解决方案吗?

编辑:这是我想要更改的主表的结构。其中一个复杂因素是涉及的关系数量。

class Project(models.Model):

    name = models.CharField(_('name'), max_length=256)
    description = models.TextField(null=True, blank=True, verbose_name=_("Project Description"))#, config_name='awesome_ckeditor')
    startdate = models.DateField(null=True, blank=True, verbose_name="Start date")
    enddate = models.DateField(null=True, blank=True, verbose_name="End date")
    notes = models.TextField(null=True, blank=True)
    status = models.ForeignKey('ProjectStatus', null=True, verbose_name="Status")
    projecttype = models.ForeignKey('ProjectType', null=True, blank=True)

    person = models.ManyToManyField(Person, through='ProjectPerson', null=True, blank=True)
    sector = models.ManyToManyField(
        'nhdb.PropertyTag', null=True, blank=True, related_name="project_sector",
        limit_choices_to={'path__startswith': "INV."})
    activity = models.ManyToManyField(
        'nhdb.PropertyTag', null=True, blank=True, related_name="project_activity",
        limit_choices_to={'path__startswith': "ACT."})
    beneficiary = models.ManyToManyField(
        'nhdb.PropertyTag', null=True, blank=True, related_name="project_beneficiary",
        limit_choices_to={'path__startswith': "BEN."})

    place = models.ManyToManyField("geo.AdminArea", through='ProjectPlace', null=True, blank=True)
    organization = models.ManyToManyField(Organization, through='ProjectOrganization', null=True, blank=True)
    stafffulltime = models.IntegerField(null=True, verbose_name=_('Full time staff'))
    staffparttime = models.IntegerField(null=True, verbose_name=_('Part time staff'))

1 个答案:

答案 0 :(得分:0)

您可以将此信息转到一个名为advice的单独数据库表,该表与建议更新的对象具有外键关系。

如果您不想冒未经授权的人向您的数据库添加任何内容的风险,您甚至可以将电子邮件发送到电子邮件链,通知管理员。

如果这不起作用,您可以将文本文件保存在服务器某处的编辑目录中,等待管理员使用。可能有一个单独的RabbitMQ设置来自动管理这个工作负载等......

基本上你有很多选择。