Django Foreign Key many to one не работает
Я немного запутался в том, как заставить правящий ключ работать с отношениями "многие к одному".
У меня есть 2 модели, auditsmodel (которая является моделью, содержащей данные) и dv_mode (содержащая проверку данных в качестве вариантов ответов).
Я создал внешний ключ в auditsmodel для ссылки на параметры проверки данных.
Models.py
Затем в view.py я сослался на поля в валидации данных (dv_model), чтобы они соответствовали полям в основной модели (auditsmodel)
Views.py:
def auditFormPage(request, pk):
model = auditsModel.objects.filter(qs_login=request.user)
form = auditForm()
try:
data = auditsModel.objects.get(Task_ID=pk)
form = auditForm(instance=data)
if request.method == 'POST':
correct_action = request.POST.get('correct_action')
key_driver = request.POST.get('key_driver')
defect_area = request.POST.get('defect_area')
defect_area = str(defect_area)
metric = request.POST.get('metric')
QA_comment = request.POST.get('QA_comment')
data.correct_associate_action = correct_action
data.Associate_Key_Driver = key_driver
data.Defect_Area_Associate = defect_area
data.save()
form.save()
except auditsModel.DoesNotExist:
pass
context = {
"items": model,
"form": form
}
return render(request, "main/auditform.html", context)
Это мой forms.py:
class auditForm(ModelForm):
class Meta:
model = auditsModel
fields = '__all__'
# RADIO BUTTONS
CHOICES = [('Defect', 'yes'),
('No Defect', 'no')]
CHOICES_Action_correctly_captured = [('yes', 'yes'), ('no', 'no')]
Audit_outcome = forms.ChoiceField(choices=CHOICES, widget=RadioSelect())
Action_correctly_captured = forms.ChoiceField(choices=CHOICES_Action_correctly_captured, widget=RadioSelect())
#Defect_Area_Associate = forms.ModelChoiceField(queryset=dv_model.objects.values_list('Defect_Area_dv', flat=True).distinct(), widget=forms.Select)
def __init__(self, *args, **kwargs):
super(auditForm, self).__init__(*args, **kwargs)
# Makes the field un-editable
# FIELDS-----------
# IPV COMMENT BOX
self.fields['QA_Comments_on_Associate_Action'].widget = forms.Textarea(
attrs={'class': 'form-control', 'style': 'height: 100px'}) # Sets the size of the widget
# SIV COMMENT BOX
self.fields['QA_Comments_on_investigator_Action'].widget = forms.Textarea(
attrs={'class': 'form-control', 'style': 'height: 100px'}) # Sets the size of the widget
# ENABLE/DISABLE FIELDS
self.fields['country'].disabled = True
self.fields['associate_resolve_date'].disabled = True
self.fields['qs_login'].disabled = True
self.fields['associate_resolve_date'].disabled = True
self.fields['seller_id'].disabled = True
self.fields['Task_ID'].disabled = True
self.fields['associate_queue'].disabled = True
self.fields['associate'].disabled = True
self.fields['metric_wk_no'].disabled = True
self.fields['associate_action'].disabled = True
for field in self.fields:
self.fields[field].required = False
if field != "qs_login" and field != "Status" and field != "associate_resolve_date" and field != "QA_Comments_on_Associate_Action" and field != "Audit_outcome":
self.fields[field].widget.attrs['class'] = "form-control"
# -----------------------------------------
Вы можете попробовать метод Lookups that span relationships
в этом документе. Просто добавьте название таблицы для большей ясности. (или погуглите этот термин для получения более подробной информации)
С этой моделью-образцом:
class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
Blog.objects.filter(entry__headline__contains='Lennon')
Если вы хотите придерживаться своего пути, я предлагаю вам распечатать необработанный запрос и посмотреть, что не так, и после этого проследить решение.
q = Query.objects.values('val1','val2','val_etc')
print(q.query)
Сначала попробуйте выполнить запрос, если он корректен во всех отношениях, прежде чем развивать его дальше. Иначе вы собьетесь с пути и не будете знать, какой шаг неверен.