내 Django 프로젝트에는 기본적으로 많은 항목을 저장하는 Item이라는 모델이 있습니다. 또한 사용자가 등록하고 로그인 할 수 있도록 Django에 내장 된 사용자 모델을 사용합니다. 지금 내가 원하는 것은 각 사용자가 항목을 "수집 됨"으로 확인할 수 있도록하는 것입니다.
지금 당장 해결 한 방식이 편안하지 않기 때문에 이것이이 문제에 대한 우수 사례인지 묻는 것입니다. 아니면 내 문제를 해결하기위한 모범 사례가 있습니까?
이 지금 내 솔루션입니다 :ManyToMany 관계에있는 항목에 사용자를 연결하는 가장 좋은 방법은 무엇입니까?
from django.contrib.auth.models import User
class Item(models.Model):
...
users_collected = models.ManyToManyField(User, related_name='items_collected')
내가로 사용 : 사용자와 항목 사이의 기록이있는 경우 해당 사용자에 의해 수집로, 다음 항목이 고려된다. 항목을 수집 한 것으로 표시하려면 단순히 레코드를 추가하고 다시 수집하지 않도록 표시하려면 해당 레코드를 제거하십시오.
특정 항목 범주에 대한 세부 템플릿에서 사용자에게 수집 된 항목이 있는지 여부를 표시하는 다음 코드가 있습니다. 사용자가 정기적으로 확인하고 항목을 선택 취소합니다으로 문제를 해결하기 위해이 방법을 사용하여
{% for item in items %}
{{ item.name }} -
{% if user in item.users_collected.all %}
in collection.
{% else %}
not in collection.
{% endif %}
내 주요 관심사는, 생성 된 ManyToMany - 테이블 생성 및 삭제 레코드의 수입니다. Item의 모델에 새로운 필드를 두는 것을 좋아하지 않는다. 재사용 성이 떨어지는 것 같아?
확대 할 수 있습니까? * 항목 모델에 새 필드를 추가하고 싶지 않습니다. *? 어떤 분야를 의미합니까? 이미 알고 있다고 생각하지만'users_collected'는'Item' 테이블의 실제 필드가 아닙니다. –
예, 내가 추천하는 사용자가 수집 한 것입니다. Django는 항목과 사용자에 대한 참조를 저장하는 새 테이블을 만든 다음이 테이블과 항목 및 사용자의 테이블에 관계를 만듭니 까? –
네, 그렇습니다. 'users_collected'는 Django가 만든 모델 * 인스턴스 *의 * 속성 *이 될 것입니다. 데이터베이스 * 테이블 * 필드 *되지 않습니다. –