【问题标题】:Django 1.7 ERROR: Cannot assign "u'Cordoba'": "Viaje.destino" must be a "Destino" instanceDjango 1.7 错误:无法分配“u'Cordoba'”:“Viaje.destino”必须是“Destino”实例
【发布时间】:2016-05-11 04:02:12
【问题描述】:

我的问题是: Viaje 类与 Destino 保持关系 N:1。我想为新的 Viaje 输入数据,但出现以下错误:

Django Version: 1.7
 Exception Type:    ValueError
 Exception Value:   
 Cannot assign "u'Cordoba'": "Viaje.destino" must be a "Destino"   instance.
 Exception Location:    /usr/local/lib/python2.7/dist-packages/Django-1.7- py2.7.egg/django/db/models/fields/related.py in __set__, line 597> Python Executable:    /usr/bin/python> Python Version:    2.7.6
Python Path: ['/home/juanma/Escritorio/exPWfebrero/Django/AgenciaViajes',
'/usr/local/lib/python2.7/dist-packages/Django-1.7-py2.7.egg',
'/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
 '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
 Server time:   Tue, 2 Feb 2016 04:54:43 -0600

表格:

from django import forms
from viajes.models import Destino, Viaje



DESPLAZAMIENTOS = (
    ('autobus', 'autobus'),
    ('tren', 'tren'),
    ('avion', 'avion'),
    ('coche', 'coche')
    )


class formularioViaje(forms.Form):
    destino = forms.CharField(required=True)
    dias = forms.IntegerField(required=True)
    coste = forms.IntegerField(required=True)
    desplazamiento = forms.ChoiceField(choices=DESPLAZAMIENTOS)

型号:

from django.db import models
from django.contrib.auth.models import User



class Destino(models.Model):
    lugar = models.CharField(max_length=100)
    descripcion = models.TextField()
    distancia = models.IntegerField()

    def __unicode__(self):
            return self.lugar

class Viaje(models.Model):
    destino = models.ForeignKey(Destino)
    dias = models.IntegerField()
    coste = models.IntegerField()
    desplazamiento = models.CharField(max_length=100)

    def __unicode__(self):
        return self.destino

最终结果应该允许表单选择目的地,但我无法做到这一点。

【问题讨论】:

  • 你如何分配 Viaje.destino ?

标签: django forms django-1.7


【解决方案1】:

由于Viaje 模型中的destino 是引用Destino 实例的ForeignKey,因此您应该在ModelForm 中使用ModelChoiceField 而不是简单的CharField

class formularioViaje(forms.Form):
    destino = forms.ModelChoiceField(
        queryset=Destino.objects.all(),
        required=True,
    )

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 2019-11-14
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2013-12-18
    • 2021-05-05
    相关资源
    最近更新 更多