Django에서 related_name 사용

8138 단어 djangowebdevpython
이 블로그에서는 Django에서 related_name 매개변수를 사용하는 방법에 대해 이야기할 것입니다. Django에서 관련 유형을 생성할 때 Django는 기본적으로 역방향 관계를 생성하거나 역방향 관계라고 말할 수 있습니다. related_name 속성을 사용하여 반대 관계에 이름을 지정할 수 있습니다.

예를 들어 이해해 봅시다.

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Note(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    content = models.TextField()


in the upper model, we have one too many relations, a user can create as many notes as many he wants. Lets’ try to access all the notes of a currently logged-in user



def get_notes(request):
    user = request.user
    notes = Notes.objects.filter(user = user)    
    context = {
        "notes":notes
    }
    return render(request, 'home.html',context)


여기에서는 Notes 모델을 사용하여 현재 로그인한 사용자의 모든 메모에 직접 액세스합니다. 이제 Notes 모델을 사용하여 현재 로그인한 사용자의 메모에 액세스하고 싶지 않고 현재 로그인한 사용자의 메모에 액세스하고 싶다고 가정해 보겠습니다. -역 관계를 사용하는 사용자. 우리는 이미 Django가 기본적으로 반대 관계를 생성한다는 것을 알고 있으며 해당 관계를 _set 객체와 함께 사용할 수 있습니다. 여기서는 현재 로그인한 사용자의 모든 메모를 가져오려고 합니다.

def get_notes(request):
    user = request.user   
    notes = user.notes_set.all()
    context = {
        "notes":notes
    }
    return render(request, 'home.html',context)


Here we can access all the todos of the currently logged-in users, using _set object.



이제 related_name 속성을 추가하고 그것이 제공하는 변경 사항과 단순성을 살펴보겠습니다.

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Note(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="notes")
    content = models.TextField()


In the above code we have added related_name = "notes" parameter.



def get_notes(request):

    user = request.user
    notes = user.notes.all()
    context = {
        "notes":notes
    }
    return render(request, 'home.html',context)


관련 이름 속성을 사용하면 코드를 더 읽기 쉽게 만들 수 있으므로 Django의 모든 유형의 모델 관계에서 관련 이름 속성을 사용할 수 있습니다. Django의 기본 역 관계를 비활성화하려면 related_name = “+”를 추가하면 Django의 기본 역 관계가 비활성화됩니다.

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Note(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="+")
    content = models.TextField()


this will disable Django's default relation.

좋은 웹페이지 즐겨찾기