2017-02-15 78 views
3

属性我有一个ModelFormSet:Django的 - 让模型对象从的ModelForm

TransactionFormSet = modelformset_factory(Transaction, exclude=("",)) 

在这种模式下:

class Transaction(models.Model): 
    account = models.ForeignKey(Account) 
    date = models.DateField() 
    payee = models.CharField(max_length = 100) 
    categories = models.ManyToManyField(Category) 
    comment = models.CharField(max_length = 1000) 
    outflow = models.DecimalField(max_digits=10, decimal_places=3) 
    inflow = models.DecimalField(max_digits=10, decimal_places=3) 
    cleared = models.BooleanField() 

这是模板:

{% for transaction in transactions %} 
<ul> 
    {% for field in transaction %} 
     {% ifnotequal field.label 'Id' %} 
     {% ifnotequal field.value None %} 
      {% ifequal field.label 'Categories' %} 
       // what do i do here? 
      {% endifequal %} 
      <li>{{ field.label}}: {{ field.value }}</li> 
     {% endifnotequal %} 
     {% endifnotequal %} 
    {% endfor %} 
</ul> 
{% endfor %} 

的看法:

def transactions_on_account_view(request, account_id): 
    if request.method == "GET": 
     transactions = TransactionFormSet(queryset=Transaction.objects.for_account(account_id)) 
     context = {"transactions":transactions} 
     return render(request, "transactions/transactions_for_account.html", context) 

我想列出页面上的所有交易信息。 如何列出交易的“帐户”属性和“类别”? 目前模板只显示他们的ID,我想为用户获得一个很好的表示(最好从他们的str()方法)。

我能看到的唯一方法就是遍历FormSet,获取Account和Category对象的Id,通过它们的Id获取对象并将我想要的信息存储在列表中,然后将其从那里有模板,但这对我来说似乎相当可怕。

有没有更好的方法来做到这一点?

+0

我可以不明白你在问什么。那些嵌套的ifequal/ifnotequal语句是什么? '__str__'是modelmultiplechoicefield的默认表示形式,这是您的多对多字段在表单上使用的内容;你有没有试过'{{field}}'? –

+0

类别的{{field}}为我提供了一个选择框,用于为不同帐户下拉帐户,我只想显示选定的帐户(没有Dropbox)和仅显示所选类别(没有选择)。我不想输入任何更改/信息,我只想显示交易的所有属性为文本。 – Lomtrur

+2

那么,你为什么使用表单? –

回答

0

感谢评论,我发现我所做的事很愚蠢和毫无意义。

这工作:

1)获取所有交易对象

transactions = Transaction.objects.for_account(account_id) 

2)传递给模板

context = {"transactions":transactions,} 
    return render(request, "transactions/transactions_for_account.html", context) 

3)访问属性,做

{% for transaction in transactions %} 
    <tr> 
    <td class="tg-6k2t">{{ transaction.account }}</td> 
    <td class="tg-6k2t">{{ transaction.categories }}</td> 
    <td class="tg-6k2t">{{ transaction.date }}</td> 
    <td class="tg-6k2t">{{ transaction.payee }}</td> 
    <td class="tg-6k2t">{{ transaction.comment }}</td> 
    <td class="tg-6k2t">{{ transaction.outflow }}</td> 
    <td class="tg-6k2t">{{ transaction.inflow }}</td> 
    <td class="tg-6k2t">{{ transaction.cleared }}</td> 
    </tr> 
    {% endfor %}