Не вижу, чтобы я сохранил поле внешнего ключа, которое установлено вне формы в БД - PullRequest
0 голосов
/ 10 ноября 2019

Мой второй пост, но мне интересно, где я иду не так. Я работаю над базой данных MySQL, Python 3.73 и Django 2.2.1. Подобные формы в других таблицах в моей работе над проектом, за исключением тех, которые не имеют внешнего ключа, который я пытаюсь загрузить за кулисы формы в представлении. Я решил, что они должны были пройти путь, чтобы передать выбранную организацию в представление add_group. Это выглядело как идеальное решение, но у него нет значений сеансов , как установить внешний ключ во время завершения формы (python / django) , поэтому я решил, что что-то пропустил или не совсем понял, как сеансы работают должным образом. Я добавил комментарии в views.py, где я подозреваю, что все идет не так (как мне кажется).

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

Будем весьма благодарны за любые указатели. Заранее спасибо.

models.py

class group_table(models.Model):
    Default_OrgGroupID = '1234567890'

    OrgGroupID = models.CharField(max_length=45, primary_key=True, default=Default_OrgGroupID)
    GroupID = models.CharField(max_length=45)
    GroupName = models.CharField(max_length=45)
    InternalOrgID = models.ForeignKey(org_table, on_delete=models.CASCADE, db_column='InternalOrgID', blank=True, null=True)

    def __str__(self):
        return self.OrgGroupID

    class Meta:
        ordering = ['InternalOrgID']

class org_table(models.Model):
    Default_InternalOrgID = 'AAAZZZ'
    Default_OrgID = '1234567890'
    Default_OrgName = 'Acme'
    Default_OrgIndustry = 'Select industry'

    InternalOrgID = models.CharField(max_length=45, primary_key=True, default=Default_InternalOrgID)
    OrgID = models.CharField(max_length=45, default=Default_OrgID)
    OrgName = models.CharField(max_length=45, default=Default_OrgName)
    OrgIndustry = models.CharField(max_length=45, default=Default_OrgIndustry)
    ParentOrgID = models.CharField(max_length=45, default=Default_OrgID)
    OrgStreet = models.CharField(max_length=60)
    OrgSuburb = models.CharField(max_length=45)
    OrgState = models.CharField(max_length=45)
    OrgPostCode = models.CharField(max_length=45)
    OrgCountry = models.CharField(max_length=45)
    OrgTelephone = models.CharField(max_length=20)
    OrgFax = models.CharField(max_length=20)
    OrgWebsite = models.CharField(max_length=60)

    def __str__(self):
        return self.InternalOrgID

    class Meta:
        ordering = ["OrgName"]

views.py

def add_group(request):
    if request.method == 'POST':
        form = GroupAddForm(request.POST)
        if form.is_valid():
            form.cleaned_data
            my_instance = form.save(commit=False)
            temporg = request.session['org_selection']
            org = org_table.objects.get( InternalOrgID = temporg )

            # This next line is where I feel it is going wrong. It seems to work the first time after 
            # I manage.py runserver but then subsequent attempts it seems not to write the org to the
            # database. All the values are as expected if I insert print statements.

            my_instance.InternalOrgID = org
            my_instance.save()

            return HttpResponseRedirect(reverse('proj1:group-index'))
    else:
        form = GroupAddForm()

    return render(request, 'proj1/group-add.html', {'form': form},)

forms.py

class GroupAddForm(forms.ModelForm):

    class Meta:
        model = group_table
        fields = ('__all__')
        exclude = ('InternalOrgID',)

template

{% extends "proj1/base_generic.html" %}

{% load static %}

<link rel="stylesheet" type="text/css" href="{% static 'proj1/style.css' %}">

{% block content %}
<div class='content'>
<body>
<h1>Add new group</h1>

<form action="{% url 'proj1:group-add' %}" method="post">
    {% csrf_token %}

  <div class="form-group row">
    {{ form.OrgGroupID.errors }}
    <label for="inputOrgGroupID" class="col-sm-2 col-form-label">Org Group ID:</label>
    {{ form.OrgGroupID }}
  </div>
  <div class="form-group row">
    {{ form.GroupID.errors }}
    <label for="inputGroupID" class="col-sm-2 col-form-label">Group ID:</label>
    {{ form.GroupID }}
  </div>
  <div class="form-group row">
   {{ form.GroupName.errors }} 
   <label for="inputGroupName" class="col-sm-2 col-form-label">Group Name:</label>
   {{ form.GroupName }}
  </div>

  <button class="btn btn-primary" type="submit" onclick="alert('Adding record')"> <span class="fas fa-plus" style="margin-right:5px;"></span>Add new group </button>
  <button class="btn btn-primary" type="submit" formaction="{% url 'proj1:group-index' %}" formmethod="get"> <span class="fas fa-angle-left" style="margin-right:5px;"></span>Return </button>
</form>

</body>
</div>
{% endblock %}

ИЗОБРАЖЕНИЕ - это то, что я вижу в базе данных, некоторые попытки работают, а другие нет. Я точно знаю, что если я попытаюсь добавить еще одну запись в базу данных сразу после успешной попытки, я получу значение Null for InternalOrgID, записанное в базу данных.

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