get_or_create универсальные отношения в Django и Python, отлаживающем в целом

Я выполнил код для создания в общем связанных объектов из этой демонстрации: http://www.djangoproject.com/documentation/models/generic_relations/

Все хорошо первоначально:

>>> bacon.tags.create(tag="fatty")

>>> tag, newtag = bacon.tags.get_or_create(tag="fatty")
>>> tag

>>> newtag
False

Но затем вариант использования, что я интересуюсь для моего приложения:

>>> tag, newtag = bacon.tags.get_or_create(tag="wholesome")
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 123, in get_or_create
    return self.get_query_set().get_or_create(**kwargs)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 343, in get_or_create
    raise e
IntegrityError: app_taggeditem.content_type_id may not be NULL

Я попробовал набор случайных вещей после рассмотрения другого кода:

>>> tag, newtag = bacon.tags.get_or_create(tag="wholesome", content_type=TaggedItem)
ValueError: Cannot assign "": "TaggedItem.content_type" must be a "ContentType" instance.

или:

>>> tag, newtag = bacon.tags.get_or_create(tag="wholesome", content_type=TaggedItem.content_type)
InterfaceError: Error binding parameter 3 - probably unsupported type.

и т.д.

Я уверен, что кто-то может дать мне правильный синтаксис, но настоящая проблема здесь состоит в том, что я понятия не имею, что продолжается. Я разрабатывал на языках со строгим контролем типов больше десяти лет (x86 блок, C++ и C#), но в новинку для Python. Я нахожу действительно трудным следовать за тем, что продолжается в Python когда вещи как это повреждение.

На языках я упомянул ранее, что это довольно просто, чтобы полагать, что вещи как это - проверяют сигнатуру метода и проверяют Ваши параметры. Рассмотрение документации Django в течение получаса оставило меня столь же потерянным. Рассмотрение источника для get_or_create (сам, ** kwargs) не помогло ни одному, так как нет никакой сигнатуры метода, и код кажется очень универсальным. Следующий шаг должен был бы отладить метод и попытку выяснить то, что происходит, но это кажется небольшим экстремальным значением...

Я, кажется, пропускаю некоторый фундаментальный операционный принцип здесь... что это? Как я решаю вопросы как это самостоятельно в будущем?

5
задан rabidpebble 14 April 2010 в 23:36
поделиться

2 ответа

ContentType.objects.get_for_model () предоставит вам соответствующий ContentType для модели. Передайте возвращенный объект как content_type .

И не стоит слишком беспокоиться о том, чтобы «получить это», когда дело касается Django. Django в основном безумен, поэтому рекомендуется экспериментировать и внимательно читать как документацию, так и исходный код.

9
ответ дан 13 December 2019 в 19:24
поделиться

Я собрал здесь несколько ссылок для отладки Django . Двумя лучшими в группе являются сообщение Саймона Уиллисона (в частности, pdb может помочь вам почувствовать себя в Python как дома) и Панель инструментов отладки Django .

2
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: