Я создаю приложение 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
Откуда вы получаете аргумент 'server_name'? – doru
server_name от модели и является полем в базе данных, но я не знаю, как ссылаться на него. – CNB
Я не думаю, что эта строка вообще ничего не делает, поскольку вы не используете ее позже. Просто прокомментируйте это, чтобы узнать, что произойдет. У вас также есть другие проблемы, такие как два блока 'else'. – Selcuk