エラーはありませんが、フォームはデータベースに保存されません。そうでなければ、django adminからデータを追加することが可能です。Django ModelFormからデータベースに保存できません
URLやリダイレクトもうまくいきます。フォームを開いたり、データを編集したり、送信したりすることはできますが、データベースは反映されません。
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class RPAS(models.Model):
user = models.OneToOneField(User)
manufacturer = models.CharField(max_length = 100, default = '')
model_name = models.CharField(max_length = 100, default = '')
serial_no = models.CharField(max_length = 50, default='')
reg_mark = models.CharField(max_length = 50, default='')
def __str__(self):
return self.user.rpas.manufacturer
# RPAS.profile = property(lambda u: RPAS.objects.get_or_create(user=u)[0])
def edit_rpas_profile(sender, **kwargs):
if kwargs['created']:
user_profile = RPAS(user=kwargs['instance'])
post_save.connect(edit_rpas_profile, sender=User)
views.py
from .forms import RPASForm
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
def edit_rpas(request):
if request.user.is_authenticated():
if request.method == "POST":
form = RPASForm(request.POST,instance=request.user)
if form.is_valid():
form.save(commit=False)
return redirect ('/account/rpas/')
else:
form = RPASForm(instance=request.user)
args = {'form': form}
return render(request, "accounts/edit_rpas.html", args)
else:
raise PermissionDenied
forms.py
from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from accounts.models import RPAS
class RPASForm(ModelForm):
class Meta:
model = RPAS
fields = (
'manufacturer',
'model_name',
'serial_no'
)
テンプレート
<form action="." method="POST" class="padding">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
、そして最後に、これはあなたがcommit=False
で保存されているので、インスタンスがデータベースに保存されることはありません私のadmin.py
from .models import RPAS
class RpasAdmin(admin.ModelAdmin):
list_display = ('manufacturer','model_name','reg_mark','serial_no')
def user_info(self, obj):
return obj.description
admin.site.register(RPAS, RpasAdmin)
コミット=偽の手段は保存されません。 –