gpt4 book ai didi

python - 如何在 Django 中允许空外键?

转载 作者:行者123 更新时间:2023-12-04 10:34:35 25 4
gpt4 key购买 nike

我对 Django 很陌生,所以这可能是有史以来最愚蠢的问题。
我在 Django 中设置了 2 个模型; “类”和“配置文件”。

'Profile' 类有一个引用 'Class' 的外键。在前端创建配置文件时,我无法将表单留空(“Profile.group”必须是“Class”实例。)。我希望能够创建一个不必属于某个类的配置文件。

class Class(models.Model):
class_name = models.CharField(max_length=5)
# a few other things that don't matter

def __str__(self):
return self.class_name

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# a few other things that don't matter
group = models.ForeignKey(Class, on_delete=models.SET_NULL, null=True, blank=True)

并在 form.py
class ProfileRegisterForm(forms.ModelForm):
# a few other things
group = forms.CharField(max_length=5, required=False)

如果有什么重要的东西我错过了,请告诉我,这是我第一次在这里发帖,所以我不知道标准是什么。

最佳答案

I want to be able to create a profile that doesn't have to belong to a class.



情况已经如此。通过使字段可以为空,您只需传递 None到它,然后它不涉及任何类。
group但是,在您的表单中,不应该是 CharField ,但是一个 ModelChoiceField .您与用户交流的方式取决于您附加到它的小部件。例如,您可以使用实现搜索栏的小部件,例如 django-select2 [Django-doc] , 或 django-autocomplete-light [Django-doc] . django-autocomplete-lightweight允许通过 AJAX 获取记录,减轻渲染引擎的负担。

例如我们可以安装 django-select2在虚拟环境中:
pip install django_select2

接下来在 ProfileRegisterForm我们可以将小部件指定为:
from django_select2.forms import Select2Widget
from app.models import Class

class ProfileRegisterForm(forms.ModelForm):
group = forms.ModelChoiceField(
queryset=Class.objects.all(), widget=Select2Widget
)

class Meta:
model = Profile

关于python - 如何在 Django 中允许空外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60249208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com