Authentication 在django restframework和管理面板中将电子邮件定义为PK

Authentication 在django restframework和管理面板中将电子邮件定义为PK,authentication,django-rest-framework,Authentication,Django Rest Framework,我不熟悉Django和Django rest框架 我有两个问题: 1.Django的auth.User带有一个id字段。我更喜欢简单地将电子邮件作为主键,我如何才能做到这一点 当我尝试使用管理站点创建新项目时,出现以下错误: (1452,'无法添加或更新子行:外键约束失败(db\u lab\u ratresearchproject\u project,约束researchproject\u proj\u lead\u research\u id\u cdf43d86\u fk\u researc

我不熟悉Django和Django rest框架

我有两个问题: 1.Django的auth.User带有一个id字段。我更喜欢简单地将电子邮件作为主键,我如何才能做到这一点

  • 当我尝试使用管理站点创建新项目时,出现以下错误:
  • (1452,'无法添加或更新子行:外键约束失败(
    db\u lab\u rat
    researchproject\u project
    ,约束
    researchproject\u proj\u lead\u research\u id\u cdf43d86\u fk\u researchp
    外键(
    lead\u research\u id
    )引用
    researchproject\u user
    email

    我认为管理员面板发送电子邮件而不是id,以便为lead_研究员属性创建项目。你知道如何解决这个问题吗

    项目模式:

    class Project(models.Model):
        name = models.CharField(max_length=200, null=False, default='new project')
        study_goal = models.CharField(max_length=3000)
        animal_welfare = models.CharField(max_length=3000)
        start_date = models.DateField(default=timezone.now().date(), null=False)
        d = timezone.timedelta(days=30)
        end_date = models.DateField(default=timezone.now().date() + d, null=False)
        due_date = models.DateField(default=timezone.now().date() + d, null=False)
        is_done = models.BooleanField(default=False)
        lead_researcher = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='lead_researcher')
        participating_researcher = models.ManyToManyField('auth.User', related_name='participating_researcher', null=True)
        comments = models.CharField(max_length=3000)
    
        class Meta:
            unique_together = (('name', 'start_date'),)
            indexes = [
                models.Index(fields=['lead_researcher', 'is_done']),
                models.Index(fields=['participating_researcher', 'is_done'])
            ]
    

    任何帮助都将不胜感激!

    不要覆盖默认主键。这会导致duplicasy错误或大数据库出现问题。如果需要,请使用序列化程序返回ID为的对象或删除其他字段

    from rest_framework import serializers
    
    class ProjectSerializer(serializers.ModelSerializer):
    
        class Meta(object):
            model = Project
            fields = ('name', 'stdy_goal', 'animal_welfare', 'start_date')
    

    此外,在bolean字段上建立索引也不是一种可取的做法。

    OK!最后我使用了普通django用户,并删除了布尔索引。