首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型表单集-如何创建现有的和预先填充的“新”条目的混合

Django模型表单集-如何创建现有的和预先填充的“新”条目的混合
EN

Stack Overflow用户
提问于 2017-09-20 05:49:46
回答 1查看 212关注 0票数 1

假设我正在构建一个阅读列表应用程序。每个阅读列表都有一个名称和许多链接回一本书的ReadingListBook对象。此外,假设有许多用户已被授予对此阅读列表的访问权限。每个用户在读完这本书后,都会给这本书打1-10分。请参阅以下模型:

代码语言:javascript
复制
#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表示评级:

代码语言:javascript
复制
#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进行了评分,我希望我的表单集如下所示:

代码语言:javascript
复制
Book A: <Users Rating>
Book B: <BLANK>
Book C: <BLANK>

注意:未评级的图书有必要没有数据库条目。有什么想法?

EN

回答 1

Stack Overflow用户

发布于 2017-09-20 06:20:16

如果我理解这个问题,我想你可以通过使用Django模板的特性并编写一个自定义过滤器来解决这个问题。

例如:

代码语言:javascript
复制
# 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

然后在模板中:

代码语言:javascript
复制
<!-- 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的更多信息。我希望我没有过于简单化!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46310259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档