"Autorid" ist ein Fremdschlüssel für das Django-Benutzermodell. Nach dem Ausführen von 'makemigrations' und 'migrate' kann ich dieses Feld in der sqlite-Shell nicht sehen. Hier sind meine Modelle,Kann kein Fremdschlüsselfeld in Django generieren
class TopicModel(models.Model):
topic = models.CharField(max_length = 100)
topicAuthor = models.CharField(max_length = 100)
authorid = models.ForeignKey(User, related_name = 'id_of_author')
views = models.PositiveIntegerField(default = 0)
def __str__(self):
return self.topic
class PostModel(models.Model):
post = HTMLField(blank = True, max_length = 1000)
pub_date = models.DateTimeField('date published')
author = models.CharField(max_length = 30)
topicid = models.ForeignKey(TopicModel, related_name = 'posts')
def __str__(self):
return self.post
Wie Sie postmodel auch einen Fremdschlüssel muss den topicmodel und es gibt kein Problem mit diesem Fremdschlüssel sehen. Nach der Migration der Migrate Datei 0001_initial.py wie folgt aussieht,
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import tinymce.models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='PostModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('post', tinymce.models.HTMLField(blank=True, max_length=1000)),
('pub_date', models.DateTimeField(verbose_name='date published')),
('author', models.CharField(max_length=30)),
],
),
migrations.CreateModel(
name='TopicModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('topic', models.CharField(max_length=100)),
('topicAuthor', models.CharField(max_length=100)),
('views', models.PositiveIntegerField(default=0)),
('authorid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='id_of_author', to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='postmodel',
name='topicid',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='posts', to='crudapp.TopicModel'),
),
]
In der SQLite-Shell die postmodel zeigt das Feld mit dem Fremdschlüssel, die
sqlite> PRAGMA table_info(crudapp_postmodel);
0|id|integer|1||1
1|pub_date|datetime|1||0
2|author|varchar(30)|1||0
3|topicid_id|integer|1||0
4|post|text|1||0
topicid_id ist aber, wenn ich das gleiche tun Bei dem topicmodel existiert das Feld mit dem Fremdschlüssel nicht, daher gibt es kein Feld für die Autorisierung.
sqlite> PRAGMA table_info(crudapp_topicmodel);
0|id|integer|1||1
1|topic|varchar(100)|1||0
2|topicAuthor|varchar(100)|1||0
3|views|integer unsigned|1||0
Lösung: Wie Alasdair schlug ich die sqlitedb Datei gelöscht und verändert die Felder von TopicID und authorid zum Thema und Autor.
Meine Vermutung ist, dass Sie die Migrationsdatei aktualisiert haben, nachdem Sie das 'crudapp_topicmodel' bereits in der Datenbank erstellt haben. Wenn Sie noch keine wichtigen Daten haben, ist es am einfachsten, Ihre SQLite-Datei zu löschen und './manage.py migrate' erneut auszuführen. – Alasdair
Beachten Sie, dass Sie in Django normalerweise Ihre Fremdschlüssel 'author' und' topic' nennen, dann erstellt Django die Spalten 'author_id' und' topic_id'. Zur Zeit haben Sie 'autorid' und' topicid', was zu den Spalten 'autrid_id' und' topicid_id' führt. – Alasdair
Brilliant danke, dass diese Vorschläge funktionierten. –