1

私にはこのようなモデルの先生がいます:

name = models.CharField(max_length=100,unique=True)
course = models.ManyToManyField(Course)

そしてコースモデル:

course_name = models.CharField(max_length=100,unique=True)

Teacherオブジェクトを作成するときは、作成する新しいオブジェクトが他の既存のTeacherオブジェクトと同じコース(m2m関係)を持たないようにする必要があります。

たとえば、TeacherオブジェクトAにEnglish、Maths、History m2mコースの関係がある場合、新しいTeacherオブジェクトにEnglish、Maths、Historyを含めることはできません。

意見

def AddTeacher(request):
    #id's are the courses object id
    id1 = request.POST.get('id1')
    id2 = request.POST.get('id2')
    id3 = request.POST.get('id3')


    Tobject  = Teacher(name="temp")
    Tobject.save()

    for i in [id1,id2,id3]:
        Cobject = Course.objects.get(id=i)
        Tobject.course.add(Cobject )
    Tobject.name = "Teacher"+str(Tobject.id)
    Tobject.save()

    temp = {}
    temp['message'] = "Object created successfully"
    return HttpResponse(json.dumps(temp),mimetype="application/json")
4

3 に答える 3

1

比較的単純なようです。で指定されたすべてのコースIDを使用して教師にクエリを実行し、request.POST結果があれば保釈します。

def AddTeacher(request):
    #id's are the courses object id
    id1 = request.POST.get('id1')
    id2 = request.POST.get('id2')
    id3 = request.POST.get('id3')

    if Teacher.objects.filter(course=id1).filter(course=id2).filter(course=id3).count() > 0:
        return HttpResponseForbidden("Can't add a teacher with these courses; one already exists")

    # ... function continues

これはあなたの質問の正確なケースに対処します。指定されたコースが既存の教師のコースのサブセットである状況に対処する場合(たとえば、2つのコースを持つ教師の追加を許可する場合)、さらに検討する必要があります。

于 2012-08-13T17:51:56.100 に答える
0

よし、これでよし

def AddTeacher(request):
    #id's are the courses object id
    id1 = request.POST.get('id1')
    id2 = request.POST.get('id2')
    id3 = request.POST.get('id3')

    qs = Teacher.objects.all()

    #Build a dynamic filter query
    qs = reduce(lambda q, c: q.filter(course=c), [c for c in [id1, id2, id3]], qs)

    if qs:
        raise ValueError("A teacher with the selected courses already exists")

    teacher  = Teacher(name="temp")
    teacher.save()

    for i in [id1, id2, id3]:
        course = Course.objects.get(id=i)
        teacher.course.add(course)
    teacher.name = "Teacher"+str(teacher.id)
    teacher.save()

    return HttpResponse(json.dumps({
        'message': 'Object created successfully'
    }), mimetype="application/json")
于 2012-08-13T13:21:55.150 に答える
0

関連する回答ではありますが、この場合は正確ではありませんが、オブジェクトが m2m にあるかどうかを次のように確認できます。

if english_course in teacher.courses.all():
    # already in there :)

いい方法だとばかり思っていました。

于 2013-05-19T15:44:35.640 に答える