Django ManyToManyField的完整性错误-外键

时间:2019-01-28 12:21:22

标签: django django-models django-forms django-views

错误

django.db.utils.IntegrityError: (1452, 'Cannot add or update a child 
row: a foreign key constraint fails (django_apollo.jobs_job_users,
CONSTRAINT jobs_job_users_jobs_id_2172345a_fk_jobs_id FOREIGN KEY
(jobs_id) REFERENCES jobs (id))')

views.py

# Ajax
@login_required
def AjaxClockJobCreate(request, user_id):

    form = JobFormInClock(request.POST, instance=User.objects.get(id=user_id))
    user11 = get_object_or_404(User, pk=user_id)
    print('printing', user11.id)

    if request.method == "POST" and request.is_ajax() and form.is_valid():    

        form.instance.job_start_date = datetime.datetime.now()
        form.instance.job_start_time = datetime.datetime.now()
        form.instance.job_end_date = datetime.datetime.now() + datetime.timedelta(days=1)
        form.instance.job_end_time = datetime.datetime.now() + datetime.timedelta(hours=15)
        form.instance.job_created_on = datetime.datetime.now()
        form.instance.job_updated_on = datetime.datetime.now()
        form.instance.job_status = 'Active'

        form.instance.job_company = request.user.userprofile.user_company
        form.instance.job_created_by = request.user
        form.instance.job_updated_by = request.user

        form.save()

        form.instance.user_jobs.add(user11.id) # ManyToManyField

        lastest_entry = Jobs.objects.latest('id')

        data = {
            'job_value': lastest_entry.id,
            'job_name': lastest_entry.job_name,
            'error_message': 'Could not enter job.'
        }

    return JsonResponse(data)

models.py

class Jobs(models.Model):
    job_company = models.ForeignKey(Company, on_delete=models.CASCADE)
    job_group = models.ForeignKey(Groups, on_delete=models.CASCADE)
    job_users = models.ManyToManyField(User,related_name='user_jobs', blank=True)
    job_name = models.CharField(max_length=30)
    job_number = models.CharField(max_length=30)
    job_description = models.CharField(max_length=100, blank=True, null=True)
    job_start_date = models.DateField(blank=True, null=True)
    job_start_time = models.TimeField(blank=True, null=True)
    job_end_date = models.DateField(blank=True, null=True)
    job_end_time = models.TimeField(blank=True, null=True)
    job_created_on = models.DateTimeField(auto_now_add=True)
    job_created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='job_created_bys')
    job_updated_on = models.DateTimeField(auto_now=True)
    job_updated_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='job_updated_bys')
    job_is_deleted = models.BooleanField(default=False)
    job_deleted_at = models.DateTimeField(blank=True, null=True)
    ACTIVE = 'Active'
    INACTIVE = 'Inactive'
    JOB_ACTIVE_CHOICES = (
        (ACTIVE, 'Active'),
        (INACTIVE, 'Inactive'),
    )
    job_status = models.CharField(
        max_length=8,
        choices=JOB_ACTIVE_CHOICES,
        default=INACTIVE,
    )

    class Meta:
        db_table = "jobs"

    def __str__(self) : 
        return self.job_name

1 个答案:

答案 0 :(得分:0)

我发现了错误,这不是保存表单和实例,所以我创建了Jobs实例,然后保存了。这是我的代码

  'use strict';
    let obj, method;
    
    obj = {
      go: function() { alert(this); }
    };
    
    obj.go();              
    
    (obj.go)();            
    
    (method = obj.go)();  
    
    (obj.go || obj.stop)();