Как мне обновить столбец таблицы с помощью Django? - PullRequest
0 голосов
/ 30 ноября 2018

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

class Client(models.Model):
    company_name = models.CharField(max_length=200)
    launchpad_id = models.PositiveIntegerField()
    client_email = models.EmailField()
    content_id = models.CharField(max_length=200)

    def __str__(self):
        return self.company_name + ' | ' + self.content_id

, и мои базы данных настроены так:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_project',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': 'xxxx',
        'PORT': 'xxx',
    },
    'info': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'reporting_database',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': 'xxx',
        'PORT': 'xxx',
    }
}

Что я хочу сделать, это когда я отправляю свои поля через модель клиента либо вАдминистратор или шаблон, он обновляет мою таблицу client_info в базе данных отчетов.Я не могу понять, как заставить это соединение работать, хотя.Буду признателен за любое направление, которое вы можете дать мне.Спасибо.

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Мне удалось достичь желаемых результатов, добавив следующий код в мою модель:

def update_mysql(self):
    cursor = db.cursor()
    sql = "UPDATE tb_reporting_info SET client_email = '%s' WHERE content_id = '%s' AND launchpad_id = '%s';"
    cursor.execute( sql % (self.client_email, self.content_id, self.launchpad_id))
    db.commit()

Я установил для своей формы действия action="{% url 'contact:addClient' %}", а мой вид:

def addClient(request):
    if request.method == 'POST':
        # Set POST data to variables
        company_name = request.POST['company_name']
        launchpad_id = request.POST['launchpad_id']
        content_id = request.POST['content_id']
        client_email = request.POST['client_email']
        client_added = True  # Tells the template to render a success message

        # Pass POST data to Client object
        c = Client(company_name = company_name,
                launchpad_id = launchpad_id,
                content_id = content_id,
                client_email = client_email
                )
        c.update_mysql()

Это голые кости, но оно отлично работает для того, что мне нужно.

0 голосов
/ 30 ноября 2018

Используйте форму модели:

from your_app import Client

class ClientUpdateForm(forms.ModelForm):
    class Meta:
        model = Client
        fields = ('company_name', 'launchpad_id', 'client_email', 'content_id')

    def __init__(self, *args, **kwargs):
        super(ClientUpdateForm, self).__init__(*args, **kwargs)
        self.fields['company_name'].required  = True
        self.fields['launchpad_id'].required  = True
        self.fields['client_email'].required  = True
        self.fields['content_id'].required  = True

    def clean(self):
        cleaned_data = super(ClientUpdateForm, self).clean()
        company_name = cleaned_data.get('company_name')
        launchpad_id = cleaned_data.get('launchpad_id')
        client_email = cleaned_data.get('client_email')
        content_id = cleaned_data.get('content_id')

Затем наследуйте от UpdateView:

from django.views.generic import UpdateView
from your_app import Client

class ClientUpdateForm(UpdateView):
    model = Client
    form_class = ClientUpdateForm
    template_name_suffix = '_update_form'

    def form_valid(self, form):
        if form.is_valid():
            client = form.save(commit=False)
            client.save()
            return HttpResponseRedirect('/redirect/')

Template_name_suffix означает, что вы должны вызвать свой шаблон, где вы отображаете форму client_update_form.html.

0 голосов
/ 30 ноября 2018

Я думаю, вам нужен для этого database_router.Удерживайте https://docs.djangoproject.com/en/2.1/topics/db/multi-db/. В основном вам нужно настроить DatabaseRouter, в котором вы устанавливаете, из какой базы данных вы будете читать таблицу модели ecc.затем установите свой маршрут базы данных в настройках djangoИ вам, вероятно, понадобится запустить миграцию для этой модели с чем-то вроде этого ./manage.py migrate myapp 0005_migration_to_run --databse = your_target_databse_name, я, вероятно, рекомендую вам иметь разные приложения внутри проекта для каждой базы данных, чтобы вам было проще.

0 голосов
/ 30 ноября 2018

Вам нужен funx, который позволяет создавать или обновлять Model.Вы можете следовать документу Django: https://docs.djangoproject.com/en/2.1/ref/models/instances/

...