В Django выберите связанное поле с помощью внешнего ключа - PullRequest
0 голосов
/ 31 января 2012

Мне известно, что для выбора связанного объекта нужно сделать object.related_set.all().Тем не менее, в моей ситуации это выдает AttributeError, поэтому его очень сложно отладить.Вот настройки:

class Action(models.Model):
    ...

class FieldDiff(models.Model):
    action = models.ForeignKey(Action, editable=False, related_name='Action')

И в оболочке:

In [16]: act = Action.objects.get(pk=34)
In [17]: act.fielddiff_set.all()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

/home/ipantuyev/progs/ccc_app/<ipython console> in <module>()

AttributeError: 'Action' object has no attribute 'fielddiff_set'

Я полагаю, это связано с переводом из Camelcase.Я могу обойти это, но этот код будет вызываться из шаблона, поэтому у меня не будет никакой дополнительной логики.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Это потому, что вы указали related_name как Action. Это означает, что вы хотите получить доступ ко всем FieldDiff экземплярам, ​​связанным с Action через Action_set. Поскольку кажется, что это не то, что вам нужно, самое простое решение - удалить параметр related_name.

1 голос
/ 31 января 2012

Это не имеет ничего общего с "переводом из Camelcase".

Вы указали свой ForeignKey явный атрибут related_name.Это имя, которое Django использует для обеспечения обратной связи.Таким образом, ваш запрос должен быть:

act.Action.all()

На самом деле, это значение related_name не имеет смысла.Вы должны удалить его, тогда оригинальная fielddiff_set будет работать.

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