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)

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

Вернуться на верх