Запросить изменения / дополнения данных в другом приложении - PullRequest
0 голосов
/ 13 февраля 2019

Короче говоря, я очень благодарен за подсказки о том, как я могу сделать следующее.У меня есть приложение А, которое я не хочу менять.У меня есть приложение B, которое должно выбрать данные из A или запросить данные для добавления / изменения в случае необходимости.Думайте о B как о приложении, предлагающем данные, которые должны заканчиваться на A только после рассмотрения / одобрения.Сам по себе B довольно бесполезен.Кроме того, значительное количество того, что пользователи B будут вводить, должно быть отклонено.Вот почему я хочу, чтобы А был защищен, так сказать.

# 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()

Джанго должен создать форму для Some_B_Model, где я могу выбрать экземпляры Some_A_Model для best_A и худшего_А соответственно;если, однако, моего намеченного best_A еще нет в базе данных A, я хочу иметь возможность запросить добавление этого элемента.И если я обнаружил, что худший_А присутствует, но содержит опечатку, я хочу иметь возможность запросить исправление этого элемента.Редактор должен быть обязан просматривать / редактировать данные, введенные в B, и либо отклонять, либо выпускать все связанные изменения в базе данных A в качестве атомарной транзакции.Я не хочу никакого мусора в A и воздерживаюсь от добавления какого-либо поля состояния, чтобы отслеживать то, что считается действительным, и требует постоянной фильтрации.Если он в A, это должно быть хорошо.

Я подумал, что мне нужно определить MyCustomField, который может быть настроенным ForeignKey.Кроме того, мне нужна некоторая промежуточная модель (может быть, «посредник»), на которую MyCustomField действительно будет указывать, и которая может содержать (универсальный) ForeignKey для выбранного элемента и маринованный экземпляр элемента, который я хотел бы видеть добавленнымв базу данных А (например, маринованный, несохраненный экземпляр Some_A_model), или оба, чтобы запросить изменение.Обратите внимание, что я рассматриваю возможность использования PickledObjectField из 'django-picklefield', но это не обязательно.

Поскольку есть только некоторая документация по полям пользовательской модели, но не о дальнейших шагах, касающихся полей формы и виджетов, кажетсяЯ должен копаться в источнике Django, чтобы выяснить, как связать предполагаемую функциональность с его магией.Вот где я надеюсь на некоторые комментарии и подсказки.Мой план звучит разумно для вас?Это известная модель, и если да, то как она называется?Может быть, кто-то уже сделал это или есть плагин, который я мог бы изучить?Какие альтернативы вы бы рассмотрели?

Большое спасибо заранее!

С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...