Инициализация foriegnkey в операции CRUD

#django #ajax

#джанго #ajax

Вопрос:

я работаю над проектом по управлению животноводческой фермой. Серверная часть работает с django, а конечная часть — с bootstrap. В проекте есть несколько приложений, как в документации django.

  views.py
    
    from django.shortcuts import render,redirect, get_object_or_404
    from django.http import JsonResponse
    from django.template.loader import render_to_string
    from django.urls import reverse_lazy
    from livestockrecords.models import *
    from .models import *
    from .forms import *
    
    
    from .models import *
    from .forms import *
    
    

 def save_feedin_form(request, form, template_name):
       data = dict()
      if request.method == 'POST':
           if form.is_valid():
             form.save()
               data['form_is_valid'] = True
               livestocks = Livestock.objects.all() 
               context ={
                    'livestocks': livestocks
              }
               data['html_livestock_list'] = 
         render_to_string('includes/_list_feeding.html', context)
          else:
             data['form_is_valid'] = False
       context = {'form': form}
      data['html_form'] = render_to_string(template_name, context, request=request)
       return JsonResponse(data)

    def feeding_add(request, pk):
        livestocks = get_object_or_404(Livestock, pk=pk)
        data = dict()
        if request.method == 'POST':
            form = FeedingForm(request.POST , initial={'livestock': pk})
            
        else:
            form = FeedingForm(initial={'livestock': livestocks})
        return save_feedin_form(request, form, 'includes/_add_feeding.html')
        
        
    models.py
    from django.db import models
    from livestockrecords.models import Livestock
    
    # Create your models here.
    class Addmedication(models.Model):
        MEDICATIONTYPE = (
            ('Drugs', 'Drugs'),
            ('Vaccination', 'Vaccination'),
            
        )
        name = models.CharField(max_length=200, null=True)
        medicationType = models.CharField(max_length=200, null=True, choices= MEDICATIONTYPE)
    
        def __str__(self):
            return self.name
    
    class Adddisease(models.Model):
        
        name = models.CharField(max_length=200, null=True)
        description = models.TextField(null=True)
    
        def __str__(self):
            return self.name
        
    
    class DailyRecords(models.Model):  
        livestock = models.ForeignKey(Livestock, null=True, on_delete = models.SET_NULL)  
        dateAdded =models.DateTimeField(auto_now_add=True, null=True)
        datepurchased=models.DateField(auto_now_add=False, null=True)
    
        class Meta:
            abstract = True
    
    class Mortality(DailyRecords):
        qty = models.IntegerField()
        cause = models.TextField(null=True)
    
    class Medication(DailyRecords):
         medication = models.ForeignKey(Addmedication, null=True, on_delete = models.SET_NULL) 
         disease = models.ForeignKey(Adddisease, null=True, on_delete = models.SET_NULL)  
       
    class Feeding(DailyRecords):
        feedname = models.CharField(max_length=200, null=True)
        qty = models.FloatField()
    forms.py
    from django import forms
    from django.forms import ModelForm
    from .models import *
    
    class FeedingForm(ModelForm):
        class Meta:
            model = Feeding
            fields = ['livestock','datepurchased', 'feedname', 'qty']
            
            labels = {
                'livestock':'',
                'datepurchased': '',
                'feedname': '',
                'qty': '',
            }
            widgets = {
                'livestock': forms.HiddenInput(),
                'datepurchased':forms.TextInput( attrs={
                    'placeholder': 'Date Added *',
                    'class': 'form-control',
                    'type': 'date',
                    }),
                'feedname':forms.TextInput(attrs = { 
                    'placeholder': 'feed name *',
                    'class': 'form-control'}),
                'qty':forms.TextInput(attrs = { 
                    'placeholder': 'Quantity of feed in kg *',
                    'class': 'form-control'}),
                    
            }
    class mortalityForm(ModelForm):
        
        class Meta:
            model = Mortality
            fields = ['livestock','datepurchased', 'qty', 'cause']
            
            labels = {
                 'livestock':'',
                'datepurchased': '',
                'qty': '',
                'cause': '',
            }
            widgets = {
                'livestock': forms.HiddenInput(),
                'datepurchased':forms.TextInput( attrs={
                    'placeholder': 'Date Added *',
                    'class': 'form-control',
                    'type': 'date',
                    }),
                'cause':forms.TextInput(attrs = { 
                    'placeholder': 'Cause of Mortality *',
                    'class': 'form-control'}),
                'qty':forms.TextInput(attrs = { 
                    'placeholder': 'Number *',
                    'class': 'form-control'}),
                    
            }
        
    class MedicationForm(ModelForm):
        class Meta:
            model = Medication
            fields = ['livestock','datepurchased', 'medication', 'disease']
            
            labels = {
                 'livestock':'',
                'datepurchased': '',
                'medication': '',
                'disease': '',
            }
            widgets = {
                 'livestock': forms.HiddenInput(),
                'datepurchased':forms.TextInput( attrs={
                    'placeholder': 'Date Added *',
                    'class': 'form-control',
                    'type': 'date',
                    }),
                'medication':forms.Select(attrs = { 
                    'placeholder': 'Drug name *',
                    'class': 'form-control'}),
                'disease':forms.Select(attrs = { 
                    'placeholder': 'Disease Name *',
                    'class': 'form-control'}),
                    
            }
    urls.py
    from django.urls import path
    from . import views
    
    
    urlpatterns = [
        # livestockrecords
        path('', views.daily_home, name = "daily-home"),
        path('daily-feeding/<str:pk>/', views.feeding_add, name = "daily-feeding"),
        
        
        
        ]
 

В view.py , форма является формой ajax. он отображается, но когда я нажимаю кнопку добавления, он не захватывает foriegnkey.

Когда я запускаю код, я получаю следующее: ошибка e.class (Ошибка значения: поле ‘id’ ожидало число, но получило ‘None’. Пожалуйста, мне нужна помощь

Комментарии:

1. Пожалуйста, правильно отформатируйте код. Сейчас это трудно читать.

2. Спасибо, я просто сделаю это

3. пожалуйста, не могли бы мы пообщаться на другой платформе, чтобы я мог лучше объяснить? потому что, похоже, того, что я хочу объяснить, предостаточно.

4. Проблема решена?