CreateView и внешний ключ от URL - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь передать внешний ключ из URL в CreateView. Там нет большой документации о том, как это сделать где-либо. InvoiceCreateView создаст запись только из AssessmentListView, поэтому всегда должен быть отправлен внешний ключ. Кажется, я не могу найти какую-либо хорошую документацию о том, как переопределить Generi c Представления на основе классов, если кто-нибудь может дать мне ссылку или какое-то направление, пожалуйста.

Вот мои модели

class Assessment(models.Model):
    Source = models.ForeignKey(Source, on_delete = models.CASCADE)
    Report_Type = models.ForeignKey(ReportType, on_delete=models.CASCADE, null=True, blank=True)
    Clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
    Doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE)
    Agent = models.ForeignKey(Agent, on_delete=models.CASCADE, blank=True, null=True)
    Claimant_Name = models.CharField(max_length=100)
    Claim_Number = models.CharField(max_length=20, null=True, blank=True)
    AssessmentDate = models.DateField(null=True, blank=True)
    AssessmentTime = models.TimeField(null=True, blank=True)    


    def __str__(self):
        return self.Claimant_Name

    def get_absolute_url(self):
        return reverse('assessments-detail', kwargs={'pk': self.pk})


class Invoice(models.Model):
    Assessment = models.ForeignKey(Assessment, on_delete = models.CASCADE)
    Number = models.IntegerField(null=True, blank=True)
    Date = models.DateField(null=True, blank=True)
    Subtotal = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True)
    Tax = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True)
    Total = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True)

    def __str__(self):
        return self.Assessment

    def get_absolute_url(self):
        return reverse('invoices-detail', kwargs={'pk': self.pk})

View.py

class InvoiceCreateView(CreateView):
    model = Invoice
    template_name = 'intake/invoice_form.html'
    form_class = InvoiceForm

    def form_invalid(self, InvoiceForm):
        InvoiceForm.instance.Assessment.id = self.kwargs.get('pk')
        return super(InvoiceCreateView, self).form_valid(InvoiceForm)

Forms.py

class AssessmentForm(forms.ModelForm):
    class Meta:
        model = Assessment
        fields = '__all__'
        widgets = {'AssessmentDate': DateInput()}

class InvoiceForm(forms.ModelForm):
    class Meta:
        model = Invoice
        fields = '__all__'
        widgets = {'Date': DateInput()}

Шаблон

<tbody>
        {% for item in assessments %}
        <tr>
            <td><a href="{% url 'assessments-detail' item.pk %}">{{ item.Source }} - {{ item.Report_Type }}</a></td>
            <td>{{ item.Claimant_Name }}</td>
            <td>{{ item.Doctor }}</td>            
            <td>{{ item.AssessmentDate }}</td>
            <td>{{ item.AssessmentTime }}</td>
            <td>{{ item.Clinic }}</td>
            <td><a class="btn btn-ou`enter code here`tline-primary btn-sm" href="{% url 'invoices-new' item.pk %}">+Invoice</a></td>
        </tr>
        {% endfor %}

    </tbody>

URL.py

путь ('invoices / new //', InvoiceCreateView.as_view (), name = 'invoices-new'),

...