Как к автоматической вставке текущий пользователь при создании объекта в django администраторе?

Просто оберните ваш код внутри условия 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;
}
25
задан Serjik 19 December 2015 в 10:17
поделиться

4 ответа

На всякий случай, если кто-то ищет ответ, вот решение, которое я нашел здесь: 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()
39
ответ дан 28 November 2019 в 21:08
поделиться

Предположим, что пользователь 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()
2
ответ дан 28 November 2019 в 21:08
поделиться

Согласно http://docs.djangoproject.com/en/dev/ref/ contrib / admin / # django.contrib.admin.ModelAdmin.prepopulated_fields вы не можете использовать ForeignKey с директивой администратора prepopulated_field, увы

, но этот поток может вам помочь. В своем ответе я также ссылаюсь на отсканированную Google версию Pro Django, у которой есть отличное решение для такого рода вещей. В идеале, я уверен, будет лучше, если вы сможете купить книгу, но в Google, похоже, и так есть большая часть соответствующей главы.

0
ответ дан 28 November 2019 в 21:08
поделиться

Если вы не хотите сохранять внешний ключ в своей модели для пользователя, тогда в вашем admin.py переопределите метод сохранения

obj.author = request.user.username
obj.save()

Здесь будет сохранено имя пользователя, который вошел в вашу базу данных.

2
ответ дан 28 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: