CheckboxSelectMultiple和ManyToManyField具有Modelform的问题

如何解决CheckboxSelectMultiple和ManyToManyField具有Modelform的问题

|| 我对Django很陌生(实际上是4个月),最近两天我一直在为这个问题而苦苦挣扎,我想我犯了一些愚蠢的错误。任何帮助或投入,我们将不胜感激。我正在使用Django 1.3。 在我的模型中
BUSINESS_GROUP = (
    (\'MNC\',\'Multinational\'),(\'INT\',\'International (Export/Import)\'),(\'DOM\',\'Domestic/National\'),(\'LOC\',\'Local\'),(\'VIR\',\'Virtual\'),)

class BusinessGroup(models.Model):
    bgroup_type = models.CharField(max_length=15,choices = BUSINESS_GROUP,blank = True,null = True)

class Business(models.Model):
    business_group_choices = models.ManyToManyField(BusinessGroup,verbose_name= \"Business Group\")
在表格中,我有类似的内容,
def __init__(self,*args,**kwargs):
    super(BusinessForm,self).__init__(*args,**kwargs)
    self.fields[\'business_group_choices\'].widget = forms.CheckboxSelectMultiple(choices=BUSINESS_GROUP)
在视图中
if request.method == \'POST\':
    form = BusinessForm(request.POST,instance = business)
    if form.is_valid():
        new_business = form.save(commit=False)
        new_business.created_by = request.user
        form_values = form.cleaned_data
        new_business.save()
        assign(\'edit_business\',request.user,new_business)
        return HttpResponseRedirect(new_business.get_absolute_url())
我遇到类似的错误,
\"DOM\" is not a valid value for a primary key.
\"INT\" is not a valid value for a primary key.
等等 我在Django模型源中找到了错误源, 但是不清楚如何解释和锻炼这个问题。 编辑: 我尝试将字段设置为null = True和/或blank = True仍然出现验证错误,为什么? 在整个设置上进行了一些更改后,我得到了这个新错误,
Select a valid choice. [u\'MNC\',u\'INT\',u\'DOM\',u\'LOC\',u\'VIR\'] is not one of the available choices.
新设置: 在模型中
class BusinessGroup(models.Model):
        bgroup_type = models.CharField(max_length=15)

class Business(models.Model):
    business_group_choices = models.ManyToManyField(BusinessGroup,verbose_name= \"Business Group\",choices=BUSINESS_GROUP)
在表格中,我有类似的内容,
def __init__(self,**kwargs)
    self.fields[\'business_group_choices\'].widget = forms.CheckboxSelectMultiple(choices=BUSINESS_GROUP)
    

解决方法

        有几件事我会改变的... 首先,我会尽量避免使用“魔术字符串”。代替:
BUSINESS_GROUP = (
    (\'MNC\',\'Multinational\'),(\'INT\',\'International (Export/Import)\'),(\'DOM\',\'Domestic/National\'),(\'LOC\',\'Local\'),(\'VIR\',\'Virtual\'),)
我会做:
#in my_app > constants.py
MNC = 0
INT = 1
DOM = 2
LOC = 3
VIR = 4

BUSINESS_GROUP_CHOICES = (
    (MNC,(INT,(DOM,(LOC,(VIR,)
这需要更改您的模型,并且我已经更改了字段名称,使其更加清晰:
from django.db import models

from businesses.constants import BUSINESS_GROUP_CHOICES,MNC


class BusinessGroup(models.Model):
    business_group_type = models.IntegerField(choices=BUSINESS_GROUP_CHOICES,default=MNC)

    def __unicode__(self):
        choices_dict = dict(BUSINESS_GROUP_CHOICES)
        return choices_dict[self.business_group_type]


class Business(models.Model):
    business_groups = models.ManyToManyField(BusinessGroup)
真正的问题在于您的形式。您不仅需要重新定义窗口小部件,还需要使用ModelMultipleChoiceField,如下所示:
from django import forms

from businesses.models import BusinessGroup


class BusinessForm(forms.ModelForm):
    class Meta:
        model = Business

    business_group = forms.ModelMultipleChoiceField(queryset=BusinessGroup.objects.all(),widget=forms.CheckboxSelectMultiple())
这就是为什么您遇到主键错误的原因。您的BUSINESS_GROUP只是一个元组。 Django试图将您选择的元组中的值分配为主键,这显然是行不通的。相反,ModelMultipleChoiceField将要执行的操作是将所选BusinessGroup的实例与业务相关联。 希望对您有所帮助。     ,        好吧,我说对了, 首先,永远不要将ManyToMany和选择混在一起,所以我的第二次尝试是完全错误的。问题出在形式上 所以现在最终的解决方案看起来像
BUSINESS_GROUP = (
    (\'MNC\',)

class BusinessGroup(models.Model):
    bgroup_type = models.CharField(max_length=15)

class Business(models.Model):
    business_group_choices = models.ManyToManyField(BusinessGroup)
而不是,
class BusinessForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
    super(BusinessForm,self).__init__(*args,**kwargs)
    self.fields[\'business_group_choices\'].widget = forms.CheckboxSelectMultiple(choices=BUSINESS_GROUP)
在表格中,我有类似的内容,
class BusinessForm(forms.ModelForm):
   business_group_choices = forms.MultipleChoiceField(label=\"Business Group\",widget=forms.CheckboxSelectMultiple,choices=BUSINESS_GROUP)
您需要将MultipleChoiceField与CheckboxSelectMultiple一起使用。 模型中的这个完全错误(混合M2M和选择),
class Business(models.Model):
    business_group_choices = models.ManyToManyField(BusinessGroup,verbose_name= \"Business Group\",choices=BUSINESS_GROUP)
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res