验证我的Django模型配置

2024-04-26 15:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

刚从Django开始,但是我想我把我的模型布局搞砸了。我想我还没有完全理解人际关系。你知道吗

我的愿望是:

my model layout

这是我的型号.py你知道吗

编辑:我修改了一下如下

from django.db import models

class User(models.Model):
        username = models.CharField(max_length=30, unique=True)
        password = models.CharField(max_length=100)
        birthday = models.DateField('birthday')
        email = models.EmailField(max_length=100)
        SEX = (
         ('M', 'Male'),
         ('F', 'Female'),
        )
        usersex = models.CharField(max_length=1, choices=SEX)
        height = models.CharField(max_length=3)
        createdat = models.DateField('join date')

        def __str__(self):
                return "%s %s %s %s %s %s" % (self.username, self.birthday, self.email, self.usersex, self.height, self.createdat)

class UserBench(models.Model):
        username = models.ForeignKey(User, related_name='bench', to_field='username')
        date = models.DateField()
        reps = models.IntegerField()
        weight = models.IntegerField()

        def __str__(self):
                return "%s %s %s %s" % (self.username, self.date, self.reps, self.weight)

class UserSquat(models.Model):
        username = models.ForeignKey(User, related_name='squat', to_field='username')
        date = models.DateField()
        reps = models.IntegerField()
        weight = models.IntegerField()

        def __str__(self):
                return "%s %s %s %s" % (self.username, self.date, self.reps, self.weight)

class UserDeadlift(models.Model):
        username = models.ForeignKey(User, related_name='deadlift', to_field='username')
        date = models.DateField()
        reps = models.IntegerField()
        weight = models.IntegerField()

        def __str__(self):
                return "%s %s %s %s" % (self.username, self.date, self.reps, self.weight)

class UserStats(models.Model):
        username = models.ForeignKey(User, related_name='stats', to_field='username')
        date = models.DateField()
        bodyweight = models.IntegerField()

        def __str__(self):
                return "%s %s %s %s" % (self.username, self.date, self.reps, self.weight)

是这样吗?我想我想要一个“ManyToManyField”而不是“ForeignKey”。你知道吗

或者,仔细想想,也许我应该给这个人添加外键列?这是因为每个人将有一个电梯(但在数据库中的多个条目)…所以我有点困惑。你知道吗

还有,那我的“to\ u field”呢?我想这就是我想做的,但是我不确定django是否能自动处理,我只是把事情搞砸了。你知道吗

编辑:我想我对现在如何加入数据感到困惑。你知道吗

如果我这样做了:

 User.squat.all()
 AttributeError: 'ForeignRelatedObjectsDescriptor' object has no attribute 'all'

如果我这样做了:

 user = User.Objects.filter(username = 'name')
 user.deadlift.all()
 Traceback (most recent call last):
 File "<console>", line 1, in <module>
 AttributeError: 'QuerySet' object has no attribute 'deadlift'

如果我这样做了:

 * Login to admin interface
 * Go to UserSquat, and click "add user"
 * The username is now EVERY field from User, so for e.g. it's detecting the username as "name 1989-05-16 email@domain.com M 180 2015-11-17" (Which are the fields in User table)

picture for reference

所以我把自己搞糊涂了,把一切都弄坏了。再次感谢。你知道吗


Tags: tonameselffielddatemodelmodelsusername
1条回答
网友
1楼 · 发布于 2024-04-26 15:15:18

你对ForeignKey的使用很好!要使用它们,请为每个外键字段分配一个related_name,如下所示:

class UserSquat(models.Model):
        username = models.ForeignKey(User, related_name='squats')

这样,每当您有一个用户时,您就可以访问他们的所有深蹲对象(?)通过user.squats.all()。你知道吗

如果由于某种原因,多个用户可以共享下蹲,则使用ManyToManyField。格式不变。你知道吗

class UserSquat(models.Model):
        # A squat can belong to more than one user
        username = models.ManyToManyField(User, related_name='squats')

相关问题 更多 >