Как предварительно заполнить USStateField в ManytoManyField? - PullRequest
1 голос
/ 19 октября 2011
territories = models.ManyToManyField(USStateField)

Первый параметр ManyToManyField должен быть либо моделью, либо именем модели, либо строкой 'self'

кто-нибудь может мне помочь, как поместить значения USStateField в ManyToManyField?

Спасибо! : D

Ответы [ 2 ]

0 голосов
/ 24 августа 2015

Чтобы построить ответ 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)
    ]
0 голосов
/ 19 октября 2011

USStateField является частью django.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)

Предполагая, что вы уже создали USState экземпляров, вы можете добавить их к MyModel следующим образом:

m = MyModel()
m.territories.add(USState.objects.get(name="AL"))
m.save()

Дополнительные примеры можно найти в Django документах, например, здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...