繁体   English   中英

如何设置 Django model 默认值等于查询结果

[英]How to set Django model default value equal to result of a query

我是 Django 的新手,并尝试创建一个 model,其中外键用户和部门的默认值设置为登录用户的正确值。 通常我使用请求 object 并查询数据库,但在 model 定义中我不知道该怎么做。 我想前进的道路是将默认值设为 function 并在 function 中进行查询,但我被卡住了。 非常感谢任何帮助。 这是我的代码示例:

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

嗯,这是可能的,但不是来自 model,而是来自管理员。 所以,你可以这样做:

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()

现在,它将像默认值一样,因为当您保存到 model 时,该值将从save_model保存

这不可能。 那是您的业务逻辑的一部分。 您应该在ViewValidator中执行此操作(如果您使用 Django Rest 框架)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM