2013-11-28 44 views
0

对不起,有一个新手问题,但我希望得到这个排序,如果它适用于我目前的实施并做了一些小调整,那将是理想的。我想要做的是有一个form具有名称相同的多个字段,但可以根据选择而有所不同。我希望表单将这些选项插入到数据库中。现在只抓取表单中的最后一个值(最后解析),提交并抛出其余部分。Django - 在提交表单时将多个字段插入到数据库中

models.py

class JobProficiencies(models.Model): 

    jobs = models.ManyToManyRel(Jobs) 
    job = models.ForeignKey(Jobs) 

    # All the Proficiencies a Company is able to flag 
    JOB_PROFICIENCIES = { 
     ('CC', 'C/C++'), 
     ('CH', 'C#'), 
     ('CO', 'COBOL'), 
     ('CS', 'CSS'), 
     ('GI', 'Git'), 
     ('HT', 'HTML'), 
     ('JA', 'Java'), 
     ('JS', 'JavaScript'), 
     ('JQ', 'JQuery'), 
     ('LI', 'LISP'), 
     ('NE', '.NET'), 
     ('PE', 'Perl'), 
     ('PH', 'PHP'), 
     ('PY', 'Python'), 
     ('RU', 'Ruby'), 
     ('SH', 'Shell'), 
     ('SQ', 'SQL'), 
     ('AU', 'Automation Writing'), 
     ('UT', 'Unit Testing'), 
     ('GB', 'Grey Box Testing'), 
     ('EC', 'Edge Case Testing'), 
     ('PH', 'Adobe Photoshop'), 
     ('CA', 'Computer Aided Graphics'), 
     ('3D', '3D Modeling'), 
     ('GI', 'GIMP'), 
     ('GP', 'Graphic Design'), 
     ('XS', 'Cross Site Scripting'), 
     ('SQ', 'SQL Injection'), 
     ('MM', 'Man in the Middle'), 
     ('PC', 'PCI'), 
     ('SA', 'Security Auditing'), 
     ('WI', 'Windows'), 
     ('MA', 'Macintosh'), 
     ('LI', 'Linux'), 
     ('UN', 'Unix'), 
     ('IP', 'IPv4/IPv6'), 
     ('CN', 'Computer Networking'), 
     ('EN', 'Enterprise Networking'), 
     ('DR', 'Disaster Recovery'), 
    } 

    PROFICIENCY_REQUIRED = { 
     ('RE', 'Required'), 
     ('RC', 'Recommended'), 
     ('OP', 'Optional') 
    } 

    COMFORT_LEVEL = { 
     ('B', 'Beginner'), 
     ('N', 'Novice'), 
     ('I', 'Intermediate'), 
     ('E', 'Expert'), 
    } 

    job_proficiency = models.CharField(max_length=2, choices=JOB_PROFICIENCIES, null=False, unique=True) 
    proficiency_required = models.CharField(max_length=2, choices=PROFICIENCY_REQUIRED, null=False, unique=True) 
    comfort_level = models.CharField(max_length=1, choices=COMFORT_LEVEL, null=False) 

views.py

# Create a Job (Companies only) 
@login_required(login_url='/login/') 
@user_passes_test(lambda u: u.groups.filter(name='Company').exists(), login_url='/login/', redirect_field_name='Only Companies can post Jobs!') 
def create(request): 

    args = {} 
    args.update(csrf(request)) 
    args['job'] = JobCreateForm(request.POST or None) 
    args['job_proficiencies'] = JobCreateProficienciesForm(request.POST or None) 

    if request.method == 'POST': 
     job = args['job'] 
     job_proficiencies = args['job_proficiencies'] 

     if job.is_valid() and job_proficiencies.is_valid(): 
      m_tags = job.cleaned_data['m_tags'] 
      _job = job.save(commit=False) 
      _job.user = request.user 
      _job.dateCreated = datetime.now() 
      _job.save() 
      _job_proficiencies = job_proficiencies.save(commit=False) 
      _job_proficiencies.job_id = _job.id 
      _job_proficiencies.save() 
      # Without this next line the tags won't be saved. 
      for m_tag in m_tags: 
       _job.tags.add(m_tag) 
      messages.success(request, "Job Posted!") 
      return HttpResponseRedirect('/job/all/') 
     else: 
      messages.error(request, "There are form errors!") 
      return render_to_response('job/new.html/', args, context_instance=RequestContext(request)) 
    return render_to_response('job/new.html', args, context_instance=RequestContext(request)) 

工作/ create.html上(模板

  <form action="/job/create/" method="post" class="form-inline"> 
      {% csrf_token %} 
      <div class="row"> 
       <div class="col-md-6"> 
        <div class="row"> 
          {{ job.title.errors }} 
          <div class="span6 inline"><label class="control-label">Job Title: </label>{{ job.title|add_class:"form-control"|attr:"placeholder:Example: Need Java Developer" }} </div> 
          {{ job.about.errors }} 
          <div class="span6 inline"><label class="control-label">About Job: </label>{{ job.about|add_class:"form-control resize:none"|attr:"placeholder:Example: 'Need Java Developer for new enterprise application!" }} </div> 
          {{ job.gitHubLink.errors }} 
          <div class="span6 inline"><label class="control-label">GitHub Link: </label>{{ job.gitHubLink|add_class:"form-control"|attr:"placeholder:Example: github.com/johndoe" }} </div> 
          {{ job.wage.errors }} 
          <div class="span6 inline"><label class="control-label">Wage: </label>{{ job.wage|add_class:"form-control"|attr:"placeholder:Example: $25/hour, $500 COD, Free, etc." }} </div> 
          {{ job.m_tags.errors }} 
          <div class="span6 inline"><label class="control-label">Keywords: </label>{{ job.m_tags|add_class:"form-control"|attr:"placeholder:Example: python, django, java, QA, design" }} </div> 
          <button class="btn btn-lg btn-success btn-block" type="submit">Post Job</button> 
        </div> 
       </div> 
       <div class="col-md-6"> 
        <div class="row"> 
         <label class="control-label">Job Proficiencies: </label> 
        </div> 
        <div class="row"> 
         <div class="col-md-6"> 
          {{ job_proficiencies.job_proficiency|add_class:"form-control" }} 
         </div> 
         <div class="col-md-3"> 
          {{ job_proficiencies.proficiency_required|add_class:"form-control" }} 
         </div> 
         <div class="col-md-3"> 
          {{ job_proficiencies.comfort_level|add_class:"form-control" }} 
         </div> 
         <div class="col-md-6"> 
          {{ job_proficiencies.job_proficiency|add_class:"form-control" }} 
         </div> 
         <div class="col-md-3"> 
          {{ job_proficiencies.proficiency_required|add_class:"form-control" }} 
         </div> 
         <div class="col-md-3"> 
          {{ job_proficiencies.comfort_level|add_class:"form-control" }} 
         </div> 
        </div> 
       </div> 
      </div> 
     </form> 

任何作为感谢。希望这个问题有道理。这是漫长的一天,我并没有真正想太清楚。

*编辑* 我解决了我的问题。我正在寻求实施Djangoformset,但只是不知道它的正确的词。 :)

找到了一个非常有用的网站在这里,以及如何建立一个帐户:http://stellarchariot.com/blog/2011/02/dynamically-add-form-to-formset-using-javascript-and-django/

干杯

回答

相关问题