from django.db import models
from django.contrib.auth.models import User
class WorkDailyRecord(models.Model):
user = models.ForeignKey(User)
date = models.DateTimeField(auto_now=True)
contents = models.TextField()
check_user = models.ManyToManyField(User)
target_user = models.ManyToManyField(User)
ONGOING_OR_END =(
('ing', '진행중'),
('end', '완료'),
)
ongoing_or_end = models.CharField(
max_length=3,
choices=ONGOING_OR_END,
default='ing',
)
我写了那段代码,然后我就给错了......
所以我搜索互联网,发现我必须使用'related_name'属性。
但我不知道为什么我必须使用那个attr ??
为什么?
答案 0 :(得分:3)
通过为User
模型设置M2M,User
个实例将在其上设置自动workdailyrecord_set
属性。由于你需要2个访问器,django会抱怨,因为它无法设置workdailyrecord_set
两次。
如果他们允许,那确实会非常混乱,因为谁知道user.workdailyrecord_set
在这种情况下会返回什么。
您需要给它一个related_name
来区分指向User
的两个关系。
target_user = models.ManyToManyField(User, related_name='workdailyrecord_target')
check_user = models.ManyToManyField(User, related_name='workdailyrecord_check')
这样,User
个实例将拥有workdailyrecord_target
反向管理器,该管理员只会WorkDailyRecord
User
与target_user
{{}}}相关的User.objects.latest('id').workdailyrecord_target.all()
# all WorkDailyRecords where user is referenced by 'target_user'
User.objects.latest('id').workdailyrecord_check.all()
# all WorkDailyRecords where user is referenced by 'target_check'
个对象。
e.g。
related_name='+'
不幸的是,即使使用django记录的{{1}}功能,您也无法禁用此功能。不要问我为什么:)