Python 禁止用户并将其添加到表中时遇到问题

Python 禁止用户并将其添加到表中时遇到问题,python,django,django-admin,models,Python,Django,Django Admin,Models,我有一个功能,旨在禁止一个用户,然后将他们添加到banked\u user表中。这样,我就可以向用户发送一封电子邮件,详细说明他们的禁令。但我似乎无法获得禁止和保存的功能 当前回溯错误:异常类型:TypeError at/admin/api/profile/ 异常值:禁止直接分配到多对多集合的前端。改为使用report\u reason.set()。 禁用用户模型 class Banned_User(models.Model): def __str__(self): return str

我有一个功能,旨在禁止一个用户,然后将他们添加到
banked\u user
表中。这样,我就可以向用户发送一封电子邮件,详细说明他们的禁令。但我似乎无法获得禁止和保存的功能

当前回溯错误:异常类型:TypeError at/admin/api/profile/ 异常值:禁止直接分配到多对多集合的前端。改为使用report\u reason.set()。

禁用用户模型

class Banned_User(models.Model):
def __str__(self):
    return str.join(str(self.profile), str(self.report_reason.report_reason))
    #return self.profile
    #return str.join(str(self.profile), str(self.report_reason))

profile = models.ForeignKey(
    'Profile',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
    related_name='banned_profile'
)

report_reason = models.ManyToManyField(
    'Report',
    #on_delete=models.PROTECT,
    blank=True,
    #null=True,
)

date_banned = models.DateField(null=True, blank=False,)
class Report(models.Model):
def __str__(self):
    return str.join(str(self.user_reported), str(self.datetime_sent))

TOXICITY = 'Toxicity'
SPORTSMANSHIP = 'Poor sportsmanship'

REPORT_REASON_CHOICES = (
    (TOXICITY, 'Toxicity'),
    (SPORTSMANSHIP, 'Unsportsmanlike Behaviour'),
)

session = models.ForeignKey(
    'Session',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
)

user_reported = models.ForeignKey(
    'Profile',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
    related_name='user_reported_report',
)

sent_by = models.ForeignKey(
    'Profile',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
    related_name='sent_by_report',
)

report_reason = models.CharField(
    max_length=255,
    choices=REPORT_REASON_CHOICES,
    default=TOXICITY,
)

datetime_sent = models.DateTimeField(auto_now_add=True,)
报告模型

class Banned_User(models.Model):
def __str__(self):
    return str.join(str(self.profile), str(self.report_reason.report_reason))
    #return self.profile
    #return str.join(str(self.profile), str(self.report_reason))

profile = models.ForeignKey(
    'Profile',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
    related_name='banned_profile'
)

report_reason = models.ManyToManyField(
    'Report',
    #on_delete=models.PROTECT,
    blank=True,
    #null=True,
)

date_banned = models.DateField(null=True, blank=False,)
class Report(models.Model):
def __str__(self):
    return str.join(str(self.user_reported), str(self.datetime_sent))

TOXICITY = 'Toxicity'
SPORTSMANSHIP = 'Poor sportsmanship'

REPORT_REASON_CHOICES = (
    (TOXICITY, 'Toxicity'),
    (SPORTSMANSHIP, 'Unsportsmanlike Behaviour'),
)

session = models.ForeignKey(
    'Session',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
)

user_reported = models.ForeignKey(
    'Profile',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
    related_name='user_reported_report',
)

sent_by = models.ForeignKey(
    'Profile',
    on_delete=models.PROTECT,
    blank=False,
    null=False,
    related_name='sent_by_report',
)

report_reason = models.CharField(
    max_length=255,
    choices=REPORT_REASON_CHOICES,
    default=TOXICITY,
)

datetime_sent = models.DateTimeField(auto_now_add=True,)

报告失败的原因是您试图将外键分配给多对多字段,该字段设置为希望您使用add命令

ban_record = Banned_User.objects.create(profile=profile, report_reason=report)
这是行不通的。您需要做的是为概要文件创建用户模型

banned_user = profile.banned_profile.create(profile=profile)
然后,您将向被禁止的用户添加禁止原因 编辑


您可以在这里查看如何使用多对多文件

我理解你的意思,在首先创建被禁止的用户配置文件之前,我无法添加报告原因。但我不会跟踪“user\u reported\u report”变量的来源?对于user\u报告中的报告,它不应该是
:banked\u user.report\u reason.add(request.user.profile.user\u reported\u report.all())
So user\u reported\u report是您为user\u reported model->user\u reported=models.ForeignKey('Profile',on\u delete=models.PROTECT,blank=False,null=False,related\u name='user\u reported\u report',)请求定义的相关名称。user.Profile.user\u reported\u report.all()有效。我在/admin/api/profile/“禁止的用户”对象上得到一个AttributeError时问了这个问题,“禁止的用户”对象没有代码为
banked\u User=profile.banked\u profile.create(profile=profile)的属性“User\u reported\u report”。add(User\u reported=profile,sent\u by=report.sent\u by)