假设我正在构建一个阅读列表应用程序。每个阅读列表都有一个名称和许多链接回一本书的ReadingListBook对象。此外,假设有许多用户已被授予对此阅读列表的访问权限。每个用户在读完这本书后,都会给这本书打1-10分。请参阅以下模型:
#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']在任何给定时间,用户可能已经为给定阅读列表中的一些、全部或无书创建了评级。
我的目标是生成一个由多个RLBRatingForm组成的表单集--每个ReadingList中每本可能被评级的书对应一个表单。对于用户已评分的任何图书,其现有评分将预先填充。对于他们未评分的任何图书,输入字段将为空。我知道如何为现有评级创建表单集,但我不确定如何为尚未评级的图书添加表单。
例如,如果阅读列表中有3本书,"Book A“、"Book B”和"Book C",而用户只对Book A进行了评分,我希望我的表单集如下所示:
Book A: <Users Rating>
Book B: <BLANK>
Book C: <BLANK>注意:未评级的图书有必要没有数据库条目。有什么想法?
发布于 2017-09-20 06:20:16
如果我理解这个问题,我想你可以通过使用Django模板的特性并编写一个自定义过滤器来解决这个问题。
例如:
# 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的更多信息。我希望我没有过于简单化!
https://stackoverflow.com/questions/46310259
复制相似问题