首页 文章

-Django-在创建数据库的新对象时“无法分配”u 'Wing'“:”Truck.MODEL“必须是”MODEL“实例

提问于
浏览
0

models.py:

class MODEL(models.Model):
    ModelName = models.CharField(max_length = 128, unique = True)
    URL_Slug = models.SlugField(unique = True)
    ...

class Maker(models.Model):
    maker = models.CharField(max_length = 128, unique = True)
    URL_Slug = models.SlugField(unique = True)
    ...
class Truck(models.Model):
    MODEL = models.ForeignKey(MODEL)
    CarID = models.CharField(max_length = 10, unique = True, null = False)
    Maker = models.ForeignKey(Maker)   
    year = models.IntegerField(default = 0)
    def __unicode__(self):
        return self.CarID

forms.py:

class MODELForm(forms.ModelForm):
    ModelName = forms.CharField(max_length = 128, help_text = 'Enter the NEW model name')
    URL_Slug = forms.SlugField(widget = forms.HiddenInput(), required = False)

    class Meta:
        model = MODEL
        fields = ('ModelName', )

class MakerForm(forms.ModelForm):
    maker = forms.CharField(max_length = 128, help_text = 'Enter the NEW maker')
    URL_Slug = forms.SlugField(widget = forms.HiddenInput(), required = False)

    class Meta:
        model = Maker
        fields = ('maker', )

class TruckForm(forms.ModelForm):
    MODEL = forms.CharField(max_length = 128, help_text = 'Enter the NEW model name')
    CarID = forms.CharField(max_length = 10, help_text = 'Enter the NEW truck ID')
    Maker = forms.CharField(max_length = 128, help_text = 'Enter the NEW maker')   
    year = forms.IntegerField(help_text = 'Enter the year of production')

    class Meta:
        model = Truck
        fields = ('MODEL', 'CarID', 'Maker', 'year')

views.py:

def add_Truck(request):
    form = TruckForm()

    if request.method == 'POST':
        form = TruckForm(request.POST)
        if form.is_valid():
            form.save(commit = True)
            return index(request)

        else:
            print(form.errors)
    return render(request, 'APP/addTruck.html', {'form': form})

HTML文件:

<!DOCTYPE html>
<html>
    <body>
        <div>
            <form id = "Truck" method = "post" action = "/APP/NewTruck/">
                {%csrf_token%}
                {% for field in form.visible_fields %}
                    {{field.errors}}
                    {{field.help_text}}
                    {{field}}
{% endfor %} <input type = "submit" name = "submit" value = "Create Truck"> </form> </div> </body> </html>

我试图在addTruck.html中创建一个新对象,我的客户因为MODEL和Maker是外键,在创建Truck对象时,MODEL和Maker字段也应该是对象 .

追溯:

这是终端Macbook的Traceback:

[07 / Aug / 2017 09:14:04]“GET / APP / NewTruck / HTTP / 1.1”200 1240内部服务器错误:/ APP / NewTruck / Traceback(最近一次调用最后一次):文件“/ Library / Frameworks / Python.framework / Versions / 2.7 / lib / python2.7 / site-packages / django / core / handlers / exception.py“,第39行,内部响应= get_response(请求)文件”/Library/Frameworks/Python.framework /Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py“,第187行,在_get_response response = self.process_exception_by_middleware(e,request)File”/ Library / Frameworks / Python . framework / Versions / 2.7 / lib / python2.7 / site-packages / django / core / handlers / base.py“,第185行,在_get_response response = wrapped_callback(request,* callback_args,** callback_kwargs)File”/ Users / apple / WebWorkshop / TKTrading / APP / views.py“,第88行,在add_Truck中,如果form.is_valid():文件”/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ django / forms / forms.py“,第169行,在is_valid中返回self.is_bound而不是self.errors文件”/ Library / Frameworks / Python.framework / Versions / 2.7 / lib / python2.7 / site-packages / django / forms / forms.py“,第161行,错误self.full_clean()文件”/ Library / Frameworks / Python . framework / Versions / 2.7 / lib / python2.7 / site-packages / django / forms / forms.py“,第372行,在full_clean self._post_clean()文件”/Library/Frameworks/Python.framework/Versions/2.7/ lib / python2.7 / site-packages / django / forms / models.py“,第388行,在_post_clean self.instance = construct_instance(self,self.instance,opts.fields,opts.exclude)文件”/ Library / Frameworks /Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/models.py“,第60行,在construct_instance f.save_form_data(实例,cleaning_data [f.name])文件”/ Library /Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/fields/init.py“,第833行,在save_form_data setattr(instance,self.name,data)文件中“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/fields/related_descrip tors.py“,第211行,在set self.field.remote_field.model._meta.object_name,ValueError:无法分配”u'Wing'“:”Truck.MODEL“必须是”MODEL“实例 . [07 / Aug / 2017 09:14:42]“POST / APP / NewTruck / HTTP / 1.1”500 93290

1 回答

  • 1

    在你的 TruckForm 中,

    MODEL = forms.CharField(max_length = 128, help_text = 'Enter the NEW model name')
    

    在你的模特中,

    MODEL = models.ForeignKey(MODEL)
    

    ForeignKey fields need to be instances of the corresponding models, rather than plain text . 错误消息非常具体 . 在您的情况下,如果您想每次为新卡车创建新模型,您可能需要覆盖 save()save() 方法,原因有正当理由 . 或者如果你想从现有的 MODELs 中选择一个模型,你可以让Django使用该字段的默认选择小部件,或者你也可以通过定义一个自定义小部件来覆盖它 .

    MODEL = forms.ModelChoiceField(queryset=MODEL.objects.all())
    #something like this.
    

相关问题