首页 > 解决方案 > 如何在 mySQL 中显示来自两个不同表的值?

问题描述

如何在 mySQL 中显示来自两个不同表的值,其中employee表包含信息job_title_id,第二个表job_titles包含job_title_id主键和相应的职位,如 CEO、员工等...

在我的表格上,我正在提取员工表中显示的所有信息,但是表中的信息job_title_idemployee一个数字。我怎样才能从job_titles表中显示其相应的 job_title ?

<div class="col-md-4 mb-3">
    <div class="form-group bmd-form-group is-focused">
        <label class="bmd-label-floating" for="jb_title">Job title</label>
        <input class="form-control" list="jb_title" name="jb_title"  value="{{employee.job_title_id}}">
        <datalist id="jb_title">
            <option  value= "1">
            <option  value="2">
            <option  value="3">
            <option  value="4">
            <option  value="5">
            <option  value="6">
            <option   value="7">
        </datalist>
    </div>
</div>
</div>

现在的下拉选项。

视图.py

def save_employee_update(request):
print(request.POST)

emp_id = request.POST['employee_id']
fname = request.POST['first_name']
midname = request.POST['middle_name']
lname = request.POST['last_name']
pr_address = request.POST['present_address']
pm_address = request.POST['permanent_address']
zcode = request.POST['zipcode']
bday = request.POST['birthday']
email = request.POST['email_address']
pagibig = request.POST['pagibig_id']
sss = request.POST['sss_id']
tin = request.POST['tin_id']
sg_pr_id = request.POST['solo_parental_id']
# rg_sched = request.POST['reg_schedule']
usid = request.POST['userid']
defpass = request.POST['default_pass']
ustype = request.POST['user_type']
# j_title = request.POST['JobTitle']

employee = Employee.objects.get(employee_id=emp_id)

employee.first_name = fname
employee.middle_name = midname
employee.last_name = lname
employee.present_address = pr_address
employee.permanent_address = pm_address
employee.zipcode = zcode
employee.birthday = bday
employee.email_address = email
employee.pagibig_id = pagibig
employee.sss_id = sss
employee.tin_id = tin
employee.solo_parental_id = sg_pr_id
# employee.reg_schedule = rg_sched
employee.userid = usid
employee.default_pass = defpass
employee.user_type = ustype
# employee.JobTitle = j_title
employee.save()
context = {
    "success": 1,
}
print(context)

return render(request, "index.html", context)

来自 mysql 的

class Employee(models.Model):
employee_id = models.AutoField(primary_key=True)
company = models.ForeignKey(CompanySettings, models.DO_NOTHING, blank=True, null=True)
pagibig_id = models.CharField(max_length=45, blank=True, null=True)
solo_parental_id = models.CharField(max_length=45, blank=True, null=True)
regular_schedule = models.CharField(max_length=45, blank=True, null=True)
days_off = models.CharField(max_length=45, blank=True, null=True)
years_prior_lead_exp = models.FloatField(blank=True, null=True)
rfid = models.CharField(max_length=255, blank=True, null=True)
fingerprint_path = models.CharField(max_length=255, blank=True, null=True)
fingerprint_device = models.CharField(max_length=255, blank=True, null=True)
fingerprint_data = models.TextField(blank=True, null=True)
nfc_card_tag = models.CharField(max_length=255, blank=True, null=True)
rank_id = models.IntegerField(blank=True, null=True)
job_title = models.ForeignKey('JobTitle', models.DO_NOTHING, blank=True, null=True)
work_policy_template = models.IntegerField(blank=True, null=True)
is_block = models.IntegerField(blank=True, null=True)
schedule_id = models.IntegerField(blank=True, null=True)
first_name = models.CharField(max_length=100, blank=True, null=True)
last_name = models.CharField(max_length=100, blank=True, null=True)
middle_name = models.CharField(max_length=100, blank=True, null=True)
present_address = models.CharField(max_length=500, blank=True, null=True)
permanent_address = models.CharField(max_length=500, blank=True, null=True)
birthday = models.DateField(blank=True, null=True)
zipcode = models.CharField(max_length=10, blank=True, null=True)
userid = models.CharField(max_length=45, blank=True, null=True)
default_pass = models.CharField(max_length=45, blank=True, null=True)
user_type = models.CharField(max_length=45, blank=True, null=True)
email_address = models.CharField(max_length=100, blank=True, null=True)
sss_id = models.CharField(max_length=45, blank=True, null=True)
tin_id = models.CharField(max_length=45, blank=True, null=True)

模型.py

class Meta:
    managed = False
    db_table = 'employee'

class Update_Employee_Form(ModelForm):
class Meta:
    model = Employee
    fields = ['employee_id', 'first_name', 'middle_name', 'last_name', 'present_address', 'permanent_address',
              'birthday', 'zipcode', 'email_address', 'sss_id', 'pagibig_id', 'tin_id', 'solo_parental_id']

表格.py

标签: pythonmysqldjango

解决方案


以下是有关 ModelChoiceField 的一些信息:https ://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.ModelChoiceField

您应该将模型的字段添加到表单中的字段中。您已经将其设置为外键,因此它应该继承这些值。如果它不能从中起作用,请将其强制作为表单类中的模型选择字段:

class Update_Employee_Form(ModelForm):
    job_title = forms.ModelChoiceField(
        queryset = JobTitle.objects.all(),
        label = 'Job Title',
        to_field_name = 'job_title' # not necessary but forces the field
        widget = forms.Select(),
        empty_label = 'Choose Job Title'
    )
    class Meta:
        model = Employee
        fields = ['employee_id', 'first_name', 'middle_name', 'last_name', 'present_address', 'permanent_address',
              'job_title', 'birthday', 'zipcode', 'email_address', 'sss_id', 'pagibig_id', 'tin_id', 'solo_parental_id']

您还应该明确说明 job_title 外键参数:

job_title = models.ForeignKey('JobTitle', on_delete=models.DO_NOTHING, blank=True, null=True)

推荐阅读