Django:表

时间:2018-02-02 20:42:15

标签: django table-relationships

我正在使用Django为网站创建注册页面。我有三个表:默认的User表,Profile表(用于捕获其他信息)和Subscription表。

我已按如下方式设置了个人资料表:

class Profile(models.Model): 
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    profile_id = models.AutoField(primary_key=True)

我按如下方式设置了订阅表:

class Subscription(models.Model):
   subscription_no = models.AutoField(primary_key=True)
   user_id = models.ForeignKey(User, on_delete=models.CASCADE)
   profile_id = models.ForeignKey(Profile, on_delete=models.CASCADE)

当新用户启动时,我在views.py中为该用户创建一个新的Profile和Subscription对象:

 #Create a new Profile object for the User
 user_profile = Profile()
 lookup_user = User.objects.get(username=username)
 lookup_user_id = lookup_user.pk
 user_profile.user_id = User.objects.get(pk=lookup_user_id)

 #Create a new Subscription object for the User
 user_subscription = Subscription()
 user_subscription.user_id = User.objects.get(pk=lookup_user_id) 

 lookup_profile = Profile.objects.get(user_id=user_profile.user_id)
 lookup_profile_id = lookup_profile.pk
 user_subscription.profile_id = Profile.objects.get(pk=lookup_profile_id)

一切正常,除了我担心我以不正确的方式建立表之间的关系。当我将用户,配置文件和订阅表添加到Django Admin应用程序时,每个新用户配置文件都会显示以下内容:

New Profile for a created user

为新用户创建的订阅对象显示以下内容:

New Subscription created for a user

最后,如果我打开一个Subscription对象,例如,关系字段(应该是主键)只显示文本" Profile对象":

Relationship field between User Profile and User Subscription

我认为profile_id字段将是一个自动增量编号,而不是" Profile对象"。我是Django的新手,我担心我没有正确建立表之间的关系。

非常感谢您的建议。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您是正确的autoincrement id字段将用作外键。 至于django admin subscription object只是实例的默认表示字符串,您可以通过向模型添加__str__方法来更改它,如下所示:

class Profile(models.Model): 
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    profile_id = models.AutoField(primary_key=True)

    def __str__(self):
        return str(self.profile_id)

使用此功能,您将看到个人资料的ID而不是profile object