[英]Django, using current user id in model
我對Python或Django並不是很熟悉,但是我開始使用Django作為后端來構建Web應用程序。
我有一些帶filler
型號。 該字段由用戶填充,其值是user
的id
。
現在,我想自動將其值設置為當前登錄的用戶。
根據我的閱讀,可以使用save_model
方法完成此操作,但是我無法使其正常工作。 ( 編輯:我不是試圖通過管理界面來設置值,所以這可能不是我想要的)
這是我得到的:
在models.py中:
class Project(models.Model):
CRITICITIES = (
('MAND', 'Mandatory to do the task'),
('HCHR', 'Not Mandatory but High Impact / High Risk Impact'),
('HCLR', 'Not Mandatory but High Impact / Low Risk Impact'),
('LCHR', 'Not Mandatory but Low Impact / High Risk Impact'),
('LCLR', 'Not Mandatory but Low Impact / Low Risk Impact'),
)
DOWNTIME = (
('3+', '> 3 Days'),
('1-3', '1 to 3 Days'),
('0.5-1', '1/2 to 1 Day'),
('0.5-', '<1/2 Day')
)
filler = models.ForeignKey(User, related_name='+')
title = models.CharField(max_length=100, unique=True)
description = models.TextField()
user_departments = models.ManyToManyField('Department', related_name='+')
products = models.ManyToManyField('Product', blank=False)
processes = models.ManyToManyField('Process')
functions = models.ManyToManyField('Function')
frameworks = models.ManyToManyField('Framework')
valuechains = models.ManyToManyField('ValueChain')
regions = models.ManyToManyField('Region')
project_path = models.CharField(max_length=255, blank=False)
password = models.CharField(max_length=50, blank=True)
downtime_acceptance = models.CharField(max_length=5, choices=DOWNTIME, blank=True)
categories = models.ManyToManyField('Category', blank=False)
criticity_detail = models.CharField(max_length=4, choices=CRITICITIES, blank=True)
comment = models.TextField(blank=True) #TODO: remove
inputs = models.ManyToManyField('InputOutput', related_name='+', blank=True)
outputs = models.ManyToManyField('InputOutput', related_name='+', blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
permissions = (
('can_view_logs', 'Can view project logs'),
)
def __unicode__(self):
return self.title
在serializers.py中
class ProjectSerializer(serializers.ModelSerializer):
requests = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Project
fields = ('id', 'filler', 'title', 'description', 'requests', 'products', 'processes', 'functions', 'frameworks',
'categories', 'password', 'project_path', 'regions', 'criticity_detail', 'comment', 'inputs',
'outputs', 'valuechains', 'user_departments')
在urls.py中:
router = DefaultRouter(trailing_slash=False)
router.register(r'users', UserViewSet)
# Other irrelevant routes
# ...
router.register(r'projects', ProjectViewSet)
projects_router = NestedSimpleRouter(router, r'projects', lookup='project', trailing_slash=False)
projects_router.register(r'requests', ProjectRequestViewSet, base_name='project-requests')
router.register(r'requestcomments', RequestCommentViewSet)
router.register(r'requests', RequestViewSet)
requests_router = NestedSimpleRouter(router, r'requests', lookup='request', trailing_slash=False)
requests_router.register(r'statuses', RequestStatusViewSet, base_name='request-statuses')
requests_router.register(r'comments', RequestCommentViewSet, base_name='request-comments')
requests_router.register(r'estimatedcosts', RequestEstimatedCostViewSet, base_name='request-estimatedcosts')
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^', include(projects_router.urls)),
url(r'^', include(requests_router.urls)),
url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^token-auth', views.obtain_auth_token),
]
在views.py中:
class ProjectViewSet(ModelViewSet):
"""
API endpoint that allows projects to be viewed or edited.
"""
queryset = Project.objects.all()
serializer_class = ProjectSerializer
例如,這里有字段created_at
和updated_at
,它們在每次發布項目時都會自動以正確的值(當前日期)發布。 我試圖實現的目標是使用當前用戶ID對字段filler
執行相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.