0
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 ?

为什么??

4

1 回答 1

3

User通过为模型设置 M2M ,User实例将自动workdailyrecord_set设置属性。由于您需要 2 个访问器,django 抱怨它不能设置workdailyrecord_set两次。

如果他们允许,那确实会非常混乱,因为谁知道user.workdailyrecord_set在这种情况下会返回什么。

您需要给它 arelated_name以区分指向 的两个关系User

target_user = models.ManyToManyField(User, related_name='workdailyrecord_target')
check_user = models.ManyToManyField(User, related_name='workdailyrecord_check')

这样,User实例将有一个workdailyrecord_target反向管理器,它只会查询与关系相关的WorkDailyRecord对象。Usertarget_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'

related_name='+'不幸的是,当涉及到 M2M 时,即使使用 django 记录的功能,您也无法禁用此功能。不要问我为什么:)

于 2013-01-16T01:39:10.147 回答