簡體   English   中英

用戶作為 Django 中的外鍵

[英]Users as foreign key in Django

我的 models.py 文件中有以下內容:

class Film(models.Model):
    title = models.CharField(max_length=200)
    director = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    pub_date = models.DateField('date published')

class Comment(models.Model):
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)

當我登錄到 Django admin 我添加了一些電影,然后添加了一些評論,選擇評論相關的電影 object。 然后我也通過管理面板創建了幾個用戶。

我希望我的人際關系是:

電影可以有很多評論/評論屬於電影

用戶可以有很多評論/評論屬於用戶

我認為,就像評論和電影一樣,我只需要將user定義為comment的外鍵。 我正在努力做到這一點。 我正在學習 Django 教程,但看不到涵蓋如何將其他表鏈接到用戶的教程。

我以為我可以做這樣的事情:

user = models.ForeignKey(User, on_delete=models.CASCADE)

像這樣導入用戶時:

from django.contrib.auth.models import User

目前的結果是,如果我保留user = models.ForeignKey(User, on_delete=models.CASCADE)我得到 err_connection_refused

使用"settings.AUTH_USER_MODEL"

因此,從“django.conf”導入“settings” ,然后使用“settings.AUTH_USER_MODEL” ,如下所示:

from django.db import models
from django.conf import settings # Here

class Comment(models.Model):
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)
                            # Here
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

也許您在設置中更改了默認用戶模型?

與在注釋模型中使用user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)而不是直接將User與外鍵一起使用,如下所示

class Comment(models.Model):
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

您需要應用遷移才能將用戶添加到評論, python manage.py makemigrations python manage.py migrate python manage.py makemigrations

如果在應用遷移時,shell會顯示一條消息,告知您正在嘗試添加非空字段'user'進行注釋,而沒有默認設置

您有2個選擇

  1. 跳過遷移並將默認值添加到模型中的字段,或將屬性設置為可為空,無論您需要什么,即

user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)

並再次應用遷移

  1. 或為新字段選擇默認值,應為databse中現有用戶的ID

這是因為django應該填充數據庫中的現有記錄(如果存在)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM