我正在Django 1.11中开发一个Web应用程序,它包括:
这是我的 models.py :
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
username = None
email = models.EmailField(unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(max_length=500)
我应该如何将我的任务模型与用户模型联系起来?我应该在用户模型还是任务模型中放入多对多字段?我该怎么做呢?
编辑:可以为用户分配一个或多个任务。但是不能将同一任务分配给其他用户。我想那是一个一对多的关系。您对此有何看法?
答案 0 :(得分:4)
对于您的情况,您可以使用下面的关系
from django.db.models import Q
from django.db import models
class User(AbstractUser):
username = None
email = models.EmailField(unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
def get_tasks(self):
return Task.objects.filter(
Q(created_by=self) | Q(assignee=self)
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(max_length=500)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
assignee = models.ManyToMany(User)
# how to use it
user = User.objects.get(pk=5)
tasks = user.get_tasks()
答案 1 :(得分:1)
我将使用带有通行选项的ManyToManyField。 这样,您就可以存储有关Task和User之间的更多信息。
<Appenders>
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
<RollingFile name="error-log" fileName="${log-path}/admin-web-error.log"
filePattern="${log-path}/admin-web-error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="activity-log" fileName="${log-path}/admin-web-activity-log.log"
filePattern="${log-path}/admin-web-activity-log-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="hms.apptizer.admin.controller" level="debug" additivity="false">
<appender-ref ref="error-log" level="error"/>
<appender-ref ref="console-log" level="debug"/>
<appender-ref ref="activity-log" level="info"/>
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="console-log"/>
</Root>
</Loggers>
如果您喜欢:-)
,角色可能要复杂得多