Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-从ModelForm获取模型对象属性_Python_Django - Fatal编程技术网

Python Django-从ModelForm获取模型对象属性

Python Django-从ModelForm获取模型对象属性,python,django,Python,Django,我有一个模型集: TransactionFormSet = modelformset_factory(Transaction, exclude=("",)) 使用此模型: class Transaction(models.Model): account = models.ForeignKey(Account) date = models.DateField() payee = models.CharField(max_length = 100) categori

我有一个模型集:

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 %}
我想在一页上列出所有交易信息。 如何列出交易的“账户”属性和“类别”? 目前模板只显示他们的id,我想为用户获得一个好的表示(最好是从他们的str()方法)

我所能看到的唯一可行的方法是迭代表单集,获取Account和Category对象的Id,通过它们的Id获取对象,并将我想要的信息存储在列表中,然后将其从那里拉到模板中,但这对我来说相当可怕


有更好的方法吗?

多亏了这些评论,我意识到我所做的是相当愚蠢和毫无意义的

这项工作:

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 %}
{%用于事务中的事务%}
{{transaction.account}}
{{transaction.categories}
{{transaction.date}
{{transaction.paye}
{{transaction.comment}}
{{transaction.outflow}
{{transaction.inflow}
{{transaction.cleared}}
{%endfor%}

我不明白你在问什么。所有这些嵌套的ifequal/ifnotequal语句是用于什么的?
\uuuu str\uuuu
是modelmultipechoicefield的默认表示形式,您的多对多字段将在表单上使用该表示形式;您是否尝试过
{{field}
?{{field}}类别为我提供了一个选择框,对于不同帐户的帐户下拉列表,我只想显示所选帐户(没有下拉框)和所选类别(没有选择)。我不想输入任何更改/信息,我只想将事务的所有属性显示为文本。那么为什么要使用表单呢?
  {% 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 %}