我正在使用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应用程序时,每个新用户配置文件都会显示以下内容:
为新用户创建的订阅对象显示以下内容:
最后,如果我打开一个Subscription对象,例如,关系字段(应该是主键)只显示文本" Profile对象":
我认为profile_id字段将是一个自动增量编号,而不是" Profile对象"。我是Django的新手,我担心我没有正确建立表之间的关系。
非常感谢您的建议。提前谢谢。
答案 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
。