请求对另一个应用程序中的数据进行更改/添加

时间:2019-02-13 16:05:00

标签: django django-models django-forms

长话短说,我非常感谢如何完成以下工作的提示。我有一个我不想更改的应用程序A。我有一个应用B,需要从A中选择数据或在需要时请求添加/更改数据。可以将B视为一个应用程序,以建议仅在审阅/批准后才应以A结尾的数据。就其本身而言,B毫无用处。此外,需要拒绝B用户输入的大量内容。这就是为什么我要保护A这样说。

# in app A
class Some_A_Model(models.Model): #e.g., think artist
    some_value = models.TextField()

# in app B
class MyCustomField(models.ForeignKey):
    ...

class Some_B_Model(models.Model): # e.g., think personal preference
    best_A = MyCustomField('Some_A_Model')
    worst_A = MyCustomField('Some_A_Model')
    how_many_times_I_like_the one_better_than_the_other = models.FloatField()

class Mediator(models.Model):
    # already exists: generic foreign key
    content_type = models.ForeignKey(
        ContentType,
        on_delete=models.CASCADE
    )
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey(
        'content_type',
        'object_id'
    )
    #does not yet exist or needs to be changed: 
    add_or_change = PickledObjectField()

Django应该为Some_B_Model创建一个表单,在该表单中,我可以分别为best_A和最差_A选择Some_A_Model的实例;但是,如果我想要的best_A尚未在A的数据库中,则我希望能够请求添加该项目。并且,如果我发现bad_A存在但有错字,我希望能够要求更正此项目。应该要求编辑者检查/编辑在B中输入的数据,并作为原子事务拒绝或释放对A数据库的所有相关更改。我不希望A中有任何垃圾,并且不要添加一些状态字段来跟踪被视为有效的内容,因此需要一直进行过滤。如果在A中,那一定很好。

我认为我需要定义一个MyCustomField,它可以是自定义的ForeignKey。另外,我需要MyCustomField实际指向的一些中间模型(可能是“中介”?),并且可以为我选择的项目保留一个(通用)ForeignKey,以及一个我希望看到的项目的腌制实例。到A的数据库(例如,腌制的,未保存的Some_A_model实例)或两者都请求更改。请注意,我考虑使用“ django-picklefield”中的PickledObjectField,但这不是必须的。

由于只有一些关于自定义模型字段的文档,而没有关于表单字段和窗口小部件的进一步步骤,因此看来我必须深入研究django的源代码,以找到如何将我想要的功能与它的魔术联系起来。那是我希望得到一些评论和提示的地方。我的计划对您来说合理吗?这是已知的模式吗?如果是这样,它叫做什么?也许有人已经做到了,或者有一个我可以研究的插件?您会考虑哪些替代方案?

非常感谢!

最诚挚的问候

0 个答案:

没有答案