繁体   English   中英

在具有多个外键的模型中创建记录Django

[英]creating records in a model with multiple foreign keys Django

所以我有一个带有多个外键字段的模型

class Designations(models.Model):
    designation_id = models.AutoField(primary_key=True)
    curriculum = models.ForeignKey(Curricula, on_delete=models.CASCADE)
    role = models.ForeignKey(Roles, on_delete=models.CASCADE)
    staff = models.ForeignKey(Staffs, on_delete=models.CASCADE)

    class Meta:
        db_table = "arc_designations"
        unique_together = ('curriculum', 'role', 'staff')
        verbose_name_plural = "Designations"
        ordering = ['designation_id']

    def __str__(self):
        return '%s of %s %s (%s)' % (self.role.role_name,
                                     self.curriculum.course_period.course.course_abbreviation,
                                     self.curriculum.module_period.module.module_abbreviation,
                                     self.staff.staff_full_name)

我想在此模型中创建记录,所以我该如何在函数视图中创建记录

**编辑我尝试了此功能,但是没有用

 @require_POST
    def setInstructor(request):
        staff = Staffs.objects.get(admission_number='16259').pk
        role = Roles.objects.get(pk=1).pk
        curriculum = Curricula.objects.get(pk=1).pk
        designation = Designations(staff=staff, role=role, curriculum=curriculum)
        designation.save()

        return redirect('index'))

首先,最好将模型命名为Designation,因为Meta已经有verbose_name_plural

这是您添加新的指定记录的方式。

内部views.py

from my_app.models import Designation

def my_view(request):

    # do some stuff

    designation = Designation.objects.create(
        curriculum = <your_curriculum>,
        role = <your_role>,
        staff = <your_staff>
    )

    # do some other stuff

尝试这个:

@require_POST
def setInstructor(request):
    staff = Staffs.objects.get(admission_number='16259')
    role = Roles.objects.first()
    curriculum = Curricula.objects.first()
    if not role or not curriculum:
        from django.shortcuts import Http404
        raise Http404('role or curriculum not found')
    Designations(staff=staff, role=role, curriculum=curriculum).save()
    return redirect('index')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM