2017-01-20 3 views
0

Я пытаюсь сделать какой-то рабочий портал. Я хочу, чтобы один пользователь мог применить к различным заданиям, но не к одному. Если один пользователь применил одно задание, он не может подать заявку на другой. Это проблема, и с помощью моей логики, когда я запустить вид я получилIntegrityError: (1062, "Duplicate for key 'user_id'")

«integrityerror»

. Пожалуйста, помогите мне. Спасибо

model.py

class JobsApplied(models.Model): 
    ''' 
     Events 
    ''' 
    class Meta: 
     ''' 
      Meta properties for this model 
     ''' 
     app_label = 'admin' 
     verbose_name_plural = 'JobsApplied' 
    job = models.ForeignKey('Job', db_index=True,related_name='appliedjobs') 
    user = models.OneToOneField(UserProfile) 
    create_date = models.DateTimeField(auto_now_add=True) 


    def __unicode__(self): 
     ''' 
      Returns object display name 
     ''' 
     return self.job 

views.py

def job_applyview(request): 
    job_id = request.POST.get('job_id') 
    ## if admin have rights to apply the job please remove "not request.user.is_staff" 
    # job_id = 11 
    if request.user and not request.user.is_staff: 
     job = Job.objects.get(id=job_id) 

     ### please enable below commands after verify 
     user = UserProfile.objects.get(user__id=request.user.id) 
     # applied_job = JobsApplied.objects.get(job=job, user=user) 


     applied_job = JobsApplied.objects.create(job=job, user=user) 
     applied_job.save(force_insert=True) 

     message = "you have applied in as " + str(job.job_title) 
     job_title = Job.objects.get(id=job_id).job_title 
     industry_id = Job.objects.get(id=job_id) 
     emp_name = IndustryProfile.objects.get(id=industry_id.industry_id).name 
     email = IndustryProfile.objects.get(id=industry_id.industry_id).email 
     b = StudentProfile.objects.get(user_profile=UserProfile.objects.get(user_id=request.user.id)) 
     name = b.name 
     contact_num = b.mobile_phone 
     location = b.address_line1 
     if b.resume: 
      resume = b.resume.url 
     else: 
      resume = "" 
     body = '''Dear %s, \n The following candidate applied for the job that you have published in Nasscom Jobs Portal. 
         \n \n Job Title : %s \n name : %s \n Contact_No : %s \n Address : %s \n Resume : %s\n \n Thanks,\n \n Job Portal     Support Team''' % (
      emp_name, job_title, name, contact_num, location, resume) 
     email = EmailMessage('Job Applied', body, to=[email]) 
     email.send() 

     form = JobForm(instance=job) 
     return render_to_response(
      'admin/job.html', {'form': form, 'message': message}, 
      context_instance=RequestContext(request), 
     ) 
    else: 
     return redirect('/admin/') 

ответ

0

Вы сказали:

один пользователь может обратиться к различным рабочим местам

но реализована как:

class JobsApplied(models.Model): 
    # [...] 
    user = models.OneToOneField(UserProfile) 

поле OneToOne используется, когда 2 объекты тесно связаны друг с другом. Здесь вы говорите, что любой экземпляр JobApplied соответствует уникальному пользователю (который кажется правильным), но вы также сказали, что любой пользователь связан с 1 (и только 1) экземпляром JobApplied. Таким образом, в этой форме пользователь не может претендовать на 2 или более задания.

Что вы хотите здесь: отношение 0..n: вы хотите, чтобы пользователь применялся к 0 или более заданий. Поэтому вы должны объявить ForeignKey в своей модели UserProfile.