Django: UnboundLocalError: локальная переменная «компания», на которую ссылается перед назначением - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь создать поле URL в подробном представлении, передав ему два первичных ключа ...

Это то, что я сделал в urls.py:

    url(r'^company/(?P<pk1>\d+)/groupdetail/(?P<pk2>\d+)/$',views.group1DetailView.as_view(),name='groupdetail'),

И в моих представлениях:

    def get_object(self):
        pk1 = self.kwargs['pk1']
        pk2 = self.kwargs['pk2']
        company = get_object_or_404(company, pk=pk1)
        group1 = get_object_or_404(group1, pk=pk2)
        return group1

Я получаю сообщение об ошибке в этой строке:

company = get_object_or_404(company, pk=pk1)

И в моем представлении списка group1 я сделал это:

<a href="{% url 'accounting_double_entry:groupdetail' pk1=company_details.pk pk2=group1_details.pk %}">{{group1.group_Name}}</a>

Может кто-нибудь сказать мне, что я делаю неправильно в этом коде?

Спасибо

1 Ответ

0 голосов
/ 02 октября 2018

В вашей функции вы присваиваете переменной с именем company, поэтому Python рассматривает company как локальную переменную, но в этот момент она не назначена, поэтому вам нужно будет использовать имя переменной anoterчтобы избежать этого:

def get_object(self):
    pk1 = self.kwargs['pk1']
    pk2 = self.kwargs['pk2']
    # make sure the variable name is different than the model name
    <b>company_obj</b> = get_object_or_404(<b>company</b>, pk=pk1)
    group1 = get_object_or_404(group1, pk=pk2)
    return group1

Поскольку вы здесь, однако, не используете company_obj, вы можете отказаться от имени переменной:

def get_object(self):
    pk1 = self.kwargs['pk1']
    pk2 = self.kwargs['pk2']
    get_object_or_404(company, pk=pk1)
    group1 = get_object_or_404(group1, pk=pk2)
    return group1

в качестве альтернативы, если ваш group1 "связан" с company, и вы хотите проверить, если это так, имеет смысл отфильтровать эту компанию:

def get_object(self):
    pk1 = self.kwargs['pk1']
    pk2 = self.kwargs['pk2']
    <b>company_obj</b> = get_object_or_404(company, pk=pk1)
    group1 = get_object_or_404(group1, pk=pk2<b>, company=company_obj</b>)
    return group1

Примечание : PEP-8 [Python-doc] советует имена классов записывать в CamelCase, тогда как поля и локальные переменные пишутся в lower_case.Нередко можно увидеть что-то вроде some_class = SomeClass(), поэтому случай верблюда начинается с заглавной буквы, столкновения между локальными переменными и классами никогда не будут существовать.

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