【问题标题】:How to convert modelchoicefield to charfield in django admin?如何在 django admin 中将 modelchoicefield 转换为 charfield?
【发布时间】:2012-08-29 18:05:01
【问题描述】:

这是我的示例模型:

class Booking(models.Model):
   email = models.EmailField(unique=True)
   first_name = models.CharField(max_length=256)
   last_name = models.CharField(max_length=256)

class MailList(models.Model):
   email = models.EmailField(unique=True)
   booking = models.ForeignKey(Booking, blank=True, null=True)

我有一个表单,我已经将 FK 字段修改为 CharField。 我的代码转到:

form.py

class MailListAdminForm(forms.ModelForm):
        booking= forms.CharField(required=False)
        class Meta:
           model = MailList

    def clean_myfield(self):
        data = self.cleaned_data['booking']
        try:
            self.booking= Booking.objects.get(pk=data)
            return data
        except (KeyError, Booking.DoesNotExist):
            raise forms.ValidationError('Invalid Booking ID. Please try again.')    

admin.py

class MailListAdmin(admin.ModelAdmin):
    form = mailListAdminForm

我收到一个错误,“Django 版本:1.3.1

异常类型:ValueError

无法分配“u'143590'”:“MailList.booking”必须是“Booking”实例。”

知道如何解决这个问题吗?谢谢

【问题讨论】:

  • mailListAdminForm 应该是 MailListAdminForm?

标签: python django django-forms django-admin django-1.3


【解决方案1】:

如果我理解你的问题

那么你得到这个错误是因为

在您的视图中,您尝试使用MailList.booking 存储值

属性 booking 是表 Booking 所以的 FK

您不能存储必须传递预订表对象的值

MailList.booking点赞

`MailList.booking` = bookingobject

bookingobject 应该是您的 Booking 表的实例

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 2015-11-06
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多