如何在ManytoManyField中预填充USStateField?

时间:2011-10-19 10:01:26

标签: django

territories = models.ManyToManyField(USStateField)

ManyToManyField的第一个参数必须是模型,模型名称或字符串'self'

有人可以帮助我如何将USStateField值放在ManyToManyField中吗?

谢谢! :d

2 个答案:

答案 0 :(得分:0)

USStateFielddjango.forms的一部分; ManyToManyField django.models django.forms的一部分CharField:来自ManytoManyField的内容无法在模型定义中使用。

解决方案是创建一个包含所有这些状态的单独模型,或者使用class USState(models.Model): STATE_CHOICES = ( ('AL', 'Alabama'), ('AK', 'Alaska'), # ... and so on ) name = models.CharField(max_length=2, choices=STATE_CHOICES) class MyModel(models.Model): territories = models.ManyToManyField(USState) ,并为其提供choices列表。

USState的实现可能如下所示:

MyModel

假设您已经创建了m = MyModel() m.territories.add(USState.objects.get(name="AL")) m.save() 个实例,可以按如下方式将它们添加到{{1}}:

{{1}}

更多示例可以在Django文档中找到,例如here

答案 1 :(得分:0)

为了构建jro的答案,我使用了localflavors.us.models.USStateField来创建一个简单的USState模型:

from django.db import models

from localflavor.us.models import USStateField


class USState(models.Model):
    name = USStateField()

然后修改初始迁移以自动插入localflavors选项中的所有状态:

from django.db import models, migrations

import localflavor.us.models
from localflavor.us.us_states import STATE_CHOICES


def add_states(apps, schema_editor):
    USState = apps.get_model("geography", "USState")
    for state in STATE_CHOICES:
        USState.objects.create(name=state[0])


class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='USState',
            ...
        ),

        migrations.RunPython(add_states)
    ]