【问题标题】:Unexpected ModelForm has no class specified errorUnexpected ModelForm has no class specified error
【发布时间】:2019-06-13 18:51:39
【问题描述】:

所以我正在尝试为模型创建一个表单,该表单指定了我添加到用户的额外字段。

forms.py

from django import forms
from .models import Profile


class ProfileForm(forms.ModelForm):
    class meta:
        model = Profile
        fields = [
            'company',
            'birth_date',
        ]

模型.py

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user        = models.OneToOneField(User, on_delete=models.CASCADE)
    company     = models.CharField(max_length=500, blank=True)
    address     = models.CharField(max_length=30, blank=True)
    birth_date  = models.DateField(null=True, blank=True)

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

views.py

from django.shortcuts import render


from .forms import ProfileForm
from .models import Profile


def profile_settings_view(request):
    form = ProfileForm(request.POST or None)
    if form.is_valid():
        form.save()

    context = {
        'form' : form
    }
    return render(request, 'userinfo/settings.html', context)

所以我的错误输出是:

ValueError 在 /settings/ ModelForm 没有指定模型类。

但这怎么可能,我用了model = Profile为什么会出现这个错误呢?

【问题讨论】:

  • 我认为应该是Meta 而不是meta

标签: django django-forms


【解决方案1】:

ProfileForm 中的meta 更改为Meta

元类:只是一个类容器,它定义了一些附加到模型的元数据。它定义了各种选项,如排序、数据库表名等。将 Meta 类包含到一个类是可选的。更多信息请阅读doc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 2020-05-20
    • 2014-11-29
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2017-10-20
    相关资源
    最近更新 更多