Как установить значение Django по умолчанию для модели равным результату запроса - PullRequest
1 голос
/ 06 мая 2020

Я новичок в Django и пытаюсь создать модель, в которой значение det по умолчанию для пользователя и отдела внешних ключей установлено на правильные значения для вошедшего в систему пользователя. Обычно я использую объект запроса и запрашиваю базу данных, но в определении модели я не знаю, как это сделать. Я предполагаю, что путь вперед - сделать значение по умолчанию функцией и сделать запрос в функции, но я застрял. Любая помощь приветствуется. Вот пример моего кода:

from django.contrib.auth import get_user_model
from django.db import models
from another_app.models import Department, DepartmentPermissions

class Article(models.Model):
    header = models.CharField(max_length=200)
    text = models.CharField(max_length=800)
    owner = models(get_user_model(), related_name='owner_article', on_delete=models.PROTECT)
    department = models.ForeignKey(Department, on_delete=models.CASCADE) #here I want it defaulted to DepartmentPermissions.objets.get(user= <logged in user>)[0].department

Ответы [ 2 ]

1 голос
/ 06 мая 2020

ну можно но не от модели а от админа. Итак, вы можете сделать:

from django.contrib.auth import get_user_model
from django.db import models
from another_app.models import Department, DepartmentPermissions

# import admin
from django.contrib import admin

class Article(models.Model):
    header = models.CharField(max_length=200)
    text = models.CharField(max_length=800)
    owner = models(get_user_model(), related_name='owner_article', on_delete=models.PROTECT)
    department = models.ForeignKey(Department, on_delete=models.CASCADE) 

class ArticleAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.department = request.user
        obj.save()

Теперь он будет действовать как по умолчанию, потому что при сохранении в модель значение будет сохранено из save_model

0 голосов
/ 06 мая 2020

Это невозможно. Это ваша часть бизнес-логи c. Вы должны сделать это в своем View или Validator (если вы используете Django Rest Framework)

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