2017-09-19 5 views
1

내가 독서 목록 앱을 작성한다고 가정 해 보겠습니다. 각 읽기 목록에는 이름과 책으로 다시 링크되는 여러 개의 ReadingListBook 객체가 있습니다. 또한이 독서 목록에 대한 액세스 권한을 부여받은 사용자가 많다고 가정 해보십시오. 각 사용자는 책을 읽은 후 책에 1-10 점을 부여합니다. 등급에 대한Django 모델 formsets- 기존 및 미리 채워진 "새로운"항목을 혼합하여 작성하는 방법

#models.py 
class Book(models.Model): 
    name = models.CharField(max_length=255) 

class ReadingList(models.Model): 
    name = models.CharField(max_length=255) 

class ReadingListBook(models.Model): 
    reading_list = models.ForeignKey('ReadingList') 
    book = models.ForeignKey('Book') 

class ReadingListBookUserRating(models.Model): 
    reading_list_book = models.ForeignKey('ReadingListBook') 
    user = models.ForeignKey(User) 
    rating = models.IntegerField() #rating of 1-10 

그리고 다음 ModelForm : 다음과 같은 모델을 참조

#forms.py 
class RLBRatingForm(forms.ModelForm): 
    class Meta: 
     model=ReadingListBookUserRating 
     fields = ['reading_list_book', 'rating'] 

를 주어진 시간에, 사용자가 일부에 대한 평가, 모든, 또는 책의 없음을 생성 한 주어진 독서 목록.

내 목표는 여러 RLBRatingForms - 하나의 ReadingList에 잠재적으로 등급이 책에 대한 formset을 생성하는 것입니다. 사용자가 평가 한 도서의 경우 기존 평점이 미리 채워집니다. 평가하지 않은 책은 입력란이 비어있게됩니다. 나는 기존 등급에 대한 formset을 작성하는 방법을 알고 있지만 아직 등급이 매겨지지 않은 책에 대해서는 양식을 추가하는 방법을 알지 못합니다.

예 : "도서 A", "도서 B"및 "도서 C"의 도서가 3 개 있고 사용자가 도서 A만을 평가 한 경우 양식 세트를 다음과 같이 표시합니다.

Book A: <Users Rating> 
Book B: <BLANK> 
Book C: <BLANK> 

참고 : 등급이 지정되지 않은 책에는 데이터베이스 항목이 필요하지 않습니다. 생각?

답변

0

내가이 문제를 이해한다면 장고 템플릿의 기능을 사용하고 사용자 지정 필터를 작성하여 문제를 해결할 수있을 것이라고 생각합니다. 예를 들어

:

# yourapp/templatetags/filter.py 
from django import template 

register = template.Library() 

@register.filter 
def has_rated(user, book): 
    # Logic to figure out if the book is rated or not 
    if user_has_rated_book: 
     return True 
    return False 

하고 다음 템플릿 : 여기

<!-- yourapp/templates/yourtemplate.html --> 

<!-- loop through the books, provided to the template --> 
{% for book in reading_list %} 
    {% if user|has_rated: book %} 
     <!-- display rating --> 
    {% else %} 
     <!-- display form field --> 
    {% endif %} 
{% endfor %} 

좀 더 정보에 대한 writing custom filters입니다. 내가 너무 단순하지 않기를 바란다.

관련 문제