Как мне избежать жесткого кодирования нескольких элементов в моей модели Django? - PullRequest
0 голосов
/ 04 мая 2020

Я новичок в Stack Overflow, поэтому заранее благодарю вас за понимание. Это вопрос о Django 3,0 (т.е. Python 3,6+).

Пример использования:

Допустим, я успешно проанализировал Свод федеральных правил и определил, что в каждом нормативном акте есть три части - цитата, тема и сам регламент. Я могу разобрать их во вложенном словаре при необходимости (или XML, или CSV, или в любом другом формате).

Словарь примерно такой:

{ 
  'citation 1' : {'Subject of Regulation 1' : 'Text of regulation'} 
  'citation 2' : {'Subject of Regulation 2 : 'More regulatory text'}

}

Там сотни положений и цитат. Я не хочу жестко закодировать эти правила в моей модели, поэтому я хочу сохранить их в словаре и называть их своей моделью.

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

Итак, это мой models.py

class CFR(models.Model):
    citation = models.CharField(max_length = 25)
    subject = models.CharField(max_length = 25)
    regulation_text = models.TextField()
    applicable = models.BooleanField(default = True)
    implementation = models.TextField()

Модель содержит поля для применимости и реализации.

Мой forms.py. Да, я знаю, что не должен использовать __all__.

class RegulationForm(forms.ModelForm):
    class Meta():
        model = CFR
        fields = ('__all__')

и мой views.py

class ApplicabilityView(CreateView):
    model = CFR
    template_name = "template.html"
    form_class = RegulationForm

Я хотел бы использовать модель для:

  1. итерации по каждому правилу в словаре.
  2. Визуализируйте форму, содержащую все правила в словаре
  3. Добавьте два поля из модели к каждому правилу формы ( применимо и реализация полей).
  4. Есть одна кнопка сохранения в конце формы.

Я надеялся передать словарь правил в набор запросов, используя def get_initial, но Я не могу этого понять. Передача словаря позволит мне повторно использовать код с любой частью CFR до тех пор, пока я могу понять, как сделать словарь.

Альтернативой является жесткое кодирование всех правил в моем models.py - и я бы предпочел найти более гибкое решение.

Спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

Некоторые параметры могут быть следующими:

  1. Postgres указывается c json поле https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#django .contrib. postgres .fields.JSONField
  2. Мария / MySQL JSON Поле https://django-mysql.readthedocs.io/en/latest/model_fields/json_field.html
  3. django -дражающий пакет json поле https://github.com/skorokithakis/django-annoying#jsonfield
  4. Используйте № SQL https://django-mongodb-engine.readthedocs.io/en/latest/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...