python - Django mysql 表名未验证

标签 python mysql django orm mysql-python

我将类添加到 Django 应用程序模型以创建 mysql 表。我在“歌曲”表中有“下载”表和“下载”列。

当我想同步数据库时,Django 返回错误:

CommandError: One or more models did not validate:
mp3mid.downloads: Reverse query name for field 'song' clashes with field 'songs.downloads'. Add a related_name argument to the definition for 'song'.

为什么表和列不能重名?

这是我的模型.py:

from django_evolution.mutations import *
from django.db import models

class singers(models.Model):
    name = models.CharField(max_length = 255)
    category = models.ForeignKey(categories)

class songs(models.Model):
    name = models.CharField(max_length = 255)
    singer = models.ForeignKey(singers)
    downloads = models.IntegerField(max_length = 11)
    exclusive = models.BooleanField(default = 0)
    hit = models.BooleanField(default = 0)
    date = models.DateTimeField(auto_now_add = True)
    link = models.CharField(max_length = 255)

class downloads(models.Model):
    song = models.ForeignKey(songs)
    date = models.DateTimeField(auto_now_add = True)

最佳答案

Django 允许您 make queries that span relationships .

在您的情况下,从 downloadssongs 的外键意味着您通常可以按照从歌曲到下载的关系向后查询:

from datetime import datetime
# fetch all songs with a download with a date on or after 2013-05-01.
songs = song.objects.filter(downloads__date__gte=datetime(2013,5,1))

但是,在这种情况下您不能这样做,因为 downloads 与您的 songs.downloads 字段冲突。

您有几个选择。首先,您可以设置 related_name为您的外键,如您的错误消息所建议的那样。

class downloads(models.Model):
    song = models.ForeignKey(songs, related_name="related_downloads")

或者,您可以重命名您的 song.downloads 字段。

class songs(models.Model):
    ...
    num_downloads = models.IntegerField(max_length = 11)

顺便说一句,我建议您将模型重命名为 SingerSongDownload(大写,单数而不是复数),以便遵循 Django 约定。

关于python - Django mysql 表名未验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499380/

相关文章:

python - py.test : ImportError: No module named mysql

Django:ForeignKey limit_choices_to 等于当前对象的客户端

python - 使用 BeautifulSoup 提取 <script> 的内容

python - 结构错误 : required argument is not an integer

python - 计算数据框中所有列的模式出现次数

python - 遍历文件夹并将每个 CSV 的一列添加到 Dataframe

php - 如何使用 bcrypt 登录

.net - 如何修改 MySQL Connector 的源代码并将其安装到我的 PC 上?

django - 在 django-apps 中查找静态文件和模板的顺序

javascript - 无法使用 Python 和 Django 进行 AJAX 调用