Просто оберните ваш код внутри условия if else, я имею в виду, что выдается исключение, когда em
имеет значение null, или возвращает одну строку, например, следующий фрагмент кода:
public String get_value(long nodeid,String ts) {
try {
String sql="Select URL FROM urllink WHERE URL='f0="+nodeid+"&ts="+ts + "'";
if (em == null) {
throw new Exception("could not found URL object.");
}
else{
return (String)em.createNativeQuery(sql).getSingleResult();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
На всякий случай, если кто-то ищет ответ, вот решение, которое я нашел здесь: http://demongin.org/blog/806/
Подводя итог: У него была следующая таблица эссе:
from django.contrib.auth.models import User
class Essay(models.Model):
title = models.CharField(max_length=666)
body = models.TextField()
author = models.ForeignKey(User, null=True, blank=True)
, где многопользователь может создавать эссе, поэтому он создал класс admin.ModelAdmin следующим образом:
from myapplication.essay.models import Essay
from django.contrib import admin
class EssayAdmin(admin.ModelAdmin):
list_display = ('title', 'author')
fieldsets = [
(None, { 'fields': [('title','body')] } ),
]
def save_model(self, request, obj, form, change):
if getattr(obj, 'author', None) is None:
obj.author = request.user
obj.save()
Предположим, что пользователь B сохраняет запись, созданную пользователем A. При использовании этого подхода выше запись будет сохранена вместе с пользователем B. В некоторых случаях это может быть не лучшим выбором, поскольку каждый пользователь, который сохраняет эту запись, будет «воровать» это. Существует обходной путь, который спасет пользователя только один раз (тот, кто его создает):
models.py
from django.contrib.auth.models import User
class Car(models.Model):
created_by = models.ForeignKey(User,editable=False,null=True,blank=True)
car_name = models.CharField(max_length=40)
admin.py
from . models import *
class CarAdmin(admin.ModelAdmin):
list_display = ('car_name','created_by')
actions = None
def save_model(self, request, obj, form, change):
if not obj.created_by:
obj.created_by = request.user
obj.save()
Согласно http://docs.djangoproject.com/en/dev/ref/ contrib / admin / # django.contrib.admin.ModelAdmin.prepopulated_fields вы не можете использовать ForeignKey с директивой администратора prepopulated_field, увы
, но этот поток может вам помочь. В своем ответе я также ссылаюсь на отсканированную Google версию Pro Django, у которой есть отличное решение для такого рода вещей. В идеале, я уверен, будет лучше, если вы сможете купить книгу, но в Google, похоже, и так есть большая часть соответствующей главы.
Если вы не хотите сохранять внешний ключ в своей модели для пользователя, тогда в вашем admin.py
переопределите метод сохранения
obj.author = request.user.username
obj.save()
Здесь будет сохранено имя пользователя, который вошел в вашу базу данных.