2016-01-27 1 views
-1

Я создаю приложение Django, которое хранит серверы в базе данных. Серверы поступают из списка через стороннее приложение. Поэтому моему приложению нужно пройти через список, добавить любые серверы, которые еще не находятся в базе данных, и удалить все, которые находятся в базе данных, но не входят в список. Однако, когда я пытаюсь выполнить часть исключений, я продолжаю получать эту ошибку referenced before assignment для части кода, которая содержит Server.objects.filter(server_name in i) Теперь я не уверен, могу ли я сделать server_name in i так, как я это сделал, но я просто играю вокруг с этим. У меня есть ошибка при выполнении Server.objects.filter(server_name=i) (что я знаю, должен работать). Может ли кто-нибудь помочь?Локальная переменная 'server_name', на которую ссылается перед присваиванием в представлении django

from django.shortcuts import render 
from django.http import HttpResponse 
from .models import Server 
from hive.cloud.pyraxhelpers.pyraxhelpers import list_hostnames 
from django.core.exceptions import ObjectDoesNotExist 

def server_home(request): 
    return render(request, 'templates/index.html', {}) 

def server(request): 
    server_name = Server.objects.get(server_name) 
    for i in list_hostnames(): 
     print "Going through list" 
     if Server.objects.filter(server_name=i).exists(): 
      print "Server exists so skip" 
     else: 
      if Server.objects.filter(server_name in i): 
       print "Add the new server" 
       server_name = Server.objects.create(server_name=i) 
       return HttpResponse("Added") 
      else: 
       print "Delete" 
       return HttpResponse("Deleted") 
return HttpResponse("Worked") 

Модель

class Server(models.Model): 
    server_name = models.CharField(primary_key=True, max_length=250) 
    renewal_date = models.DateField('expiry date', null=False, default=timezone.now) 
    deletion_date = models.DateField('deletion date', null=False, default=timezone.now) 
    def __unicode__(self): 
     return self.server_name 
+0

Откуда вы получаете аргумент 'server_name'? – doru

+0

server_name от модели и является полем в базе данных, но я не знаю, как ссылаться на него. – CNB

+1

Я не думаю, что эта строка вообще ничего не делает, поскольку вы не используете ее позже. Просто прокомментируйте это, чтобы узнать, что произойдет. У вас также есть другие проблемы, такие как два блока 'else'. – Selcuk

ответ

0

Вы получаете эту ошибку, потому что вы ссылку на переменную server_name перед тем назначением, как говорит об ошибке.

Проблема заключается в этой строке:

server_name = Server.objects.get (server_name)

Что должен содержать второй server_name переменной? Python не знает.

Похоже, вы хотите добавить аргумент к своему звонку, например def server(request, server_name). Не забудьте также изменить urls.py.

+0

server_name - это сервер модели, это поле в базе данных, как мне его ссылаться? – CNB

+0

См. Редактирование: я не понимаю, что именно вы связываете, но похоже, что вы хотите иметь аргумент 'имя_сервера' для вашей функции' server (request) '. – SaeX

+0

Я хочу использовать поле 'server_name', чтобы проверить, является ли 'i' в 'list_hostname' равным любому из server_names в базе данных. Добавление имя_сервера в качестве аргумента не будет работать, потому что оно ожидает только одного аргумента. – CNB

Смежные вопросы