如何使用 `label_from_instance` 为字段设置 `null=True`?
How to set `null=True` for a field using `label_from_instance`?
我正在尝试为使用 label_from_instance
的字段设置 null=True
和 blank=True
。
但不能通过在model class
中定义字段来设置。
如果我尝试像下面的代码那样设置它,我会收到错误消息。
fk_id = NameChoiceField(queryset=PkModel.objects.all().order_by('pk_name').distinct(), null=True, blank=True)
TypeError: init() got an unexpected keyword argument 'null'
在这种情况下如何设置 null
和 blank
?
代码如下:
forms.py
from django import forms
from django.forms import ModelChoiceField
from .models import *
class NameChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return f'{obj.pk_name}'
class IndexForm(forms.ModelForm):
fk_id = NameChoiceField(queryset=PkModel.objects.all().order_by('pk_name').distinct())
class Meta:
model = FkModel
fields = '__all__'
models.py
from django.db import models
class PkModel(models.Model):
pk_id = models.IntegerField(verbose_name='pk_id',primary_key=True)
pk_name = models.CharField(max_length=20, verbose_name='pk_name')
class Meta:
verbose_name_plural = 'PkModel'
class FkModel(models.Model):
fk_code = models.CharField(max_length=20, verbose_name='fk_code', primary_key=True)
fk_id = models.ForeignKey(PkModel, to_field='pk_id', db_column='fk_id', verbose_name='fk_id',
on_delete=models.CASCADE, null=True, blank=True)
class Meta:
verbose_name_plural = 'FkModel'
Python 3.8
Django 3.2
null
和blank
是模型字段,描述数据库级别的有效数据。在表单中,您改为声明是否必须设置该字段以使表单有效。
我正在尝试为使用 label_from_instance
的字段设置 null=True
和 blank=True
。
但不能通过在model class
中定义字段来设置。
如果我尝试像下面的代码那样设置它,我会收到错误消息。
fk_id = NameChoiceField(queryset=PkModel.objects.all().order_by('pk_name').distinct(), null=True, blank=True)
TypeError: init() got an unexpected keyword argument 'null'
在这种情况下如何设置 null
和 blank
?
代码如下:
forms.py
from django import forms
from django.forms import ModelChoiceField
from .models import *
class NameChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return f'{obj.pk_name}'
class IndexForm(forms.ModelForm):
fk_id = NameChoiceField(queryset=PkModel.objects.all().order_by('pk_name').distinct())
class Meta:
model = FkModel
fields = '__all__'
models.py
from django.db import models
class PkModel(models.Model):
pk_id = models.IntegerField(verbose_name='pk_id',primary_key=True)
pk_name = models.CharField(max_length=20, verbose_name='pk_name')
class Meta:
verbose_name_plural = 'PkModel'
class FkModel(models.Model):
fk_code = models.CharField(max_length=20, verbose_name='fk_code', primary_key=True)
fk_id = models.ForeignKey(PkModel, to_field='pk_id', db_column='fk_id', verbose_name='fk_id',
on_delete=models.CASCADE, null=True, blank=True)
class Meta:
verbose_name_plural = 'FkModel'
Python 3.8
Django 3.2
null
和blank
是模型字段,描述数据库级别的有效数据。在表单中,您改为声明是否必须设置该字段以使表单有效。