Djangoを使用してDebt
モデルを作成しようとしています。それは多くのユーザーに負債をリンクするdebtors
フィールドを持っています。DjangoはManyToMany(auth.users)で動作しません
これは、私がDjangoの管理パネルでやりたいように動作しますが、Djangoフォームを使用して動作させることはできません。私は債務を作成することができますが、債務者のフィールドは空いていますが、ブラウザーには選択できるユーザーの正確なリストが表示されています。
さらに驚くべきことは、モデル定義でblank=False
を使用すると、それが許されないと考えられたことです。
models.py:
from django.db import models
from django.utils import timezone
class Debt(models.Model):
author = models.ForeignKey('auth.User', related_name='author')
name = models.CharField(max_length=200)
amount = models.FloatField()
debtors = models.ManyToManyField('auth.User', blank=False)
invoice = models.FileField(blank=True)
created_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.name
forms.py:
from django import forms
from .models import Debt
class NewDebtForm(forms.ModelForm):
class Meta:
model = Debt
fields = ('name', 'amount', 'invoice', 'created_date', 'debtors')
views.py:
from django.shortcuts import render, redirect
from .models import Debt
from .forms import NewDebtForm
def debt_list(request):
if request.method == "POST":
form = NewDebtForm(request.POST)
if form.is_valid():
debt = form.save(commit=False)
debt.author = request.user
debt.save()
debts = Debt.objects.order_by('created_date')
form = NewDebtForm()
return render(request, 'debt_share/debt_list.html',
{'debts': debts,
'form': form})
debt_list.html:
{% extends 'debt_share/base.html' %}
{% block content %}
{% for debt in debts %}
<h1>{{ debt.name }}</h1>
<h2>payé par {{ debt.author }}</h2>
<h2>{{ debt.amount }} {{ debt.invoice }}</h2>
<p>
Concerne
{% for user in debt.debtors.all %}
{{ user }}
{% endfor %}
</p>
{% endfor %}
<form method="POST">{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
{% endblock content %}
さて、このsave_m2mが存在を知っているが、それは同じ問題のように見えませんでした。見逃した。 – nicoco