Мой второй пост, но мне интересно, где я иду не так. Я работаю над базой данных 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, записанное в базу данных.