在ModelForm中使用`SplitArrayField`而不是`SimpleArrayField`

时间:2017-03-16 10:18:12

标签: django postgresql django-models django-forms

我有ArrayField的模型,我想使用ModelForm。 Django默认使用SimpleArrayField,但我需要SplitArrayField。我从json获取数据,我只使用表单进行验证,而且我不需要输入小部件。 (我使用客户端渲染)

class Profile(models.Model):
  phone = ArrayField(CharField(max_length=20, validators=[some_validator]))

class ProfileForm(ModelForm):
  class Meta:
    model = Profile

form = ProfileForm(data={"phone":["555-5555","444-4444"]})
form.validate()

如何在SplitArrayField中使用ModelForm

2 个答案:

答案 0 :(得分:1)

我在field_classes课程中使用Meta解决了我的问题:

class ProfileForm(ModelForm):

    class Meta:
        model = Profile
        field_classes = {
            'phone': SplitArrayField, # or any custom field
        }

注意

SplitArrayField对我来说不够好,所以我创建了自己的array form field

答案 1 :(得分:0)

我认为对于纯粹的django来说,目前这是不可能的。 ticket提出了使用SplitArrayField的可能性。

但你可以使用这个包:django_postgres_extensions。 在那里,您可以通过定义SplitArrayField参数来使用form_size

from django_postgres_extensions.models.fields import ArrayField

class Product(models.Model):
    keywords = ArrayField(models.CharField(max_length=20), default=[],  form_size=10, blank=True)