Shivam Sarda
Shivam Sarda

Reputation: 57

First parameter to ForeignKey must be either a model, a model n ame, or the string 'self'

Hey I am using the First Parameter as a model but still it keeps on giving the error: First parameter to ForeignKey must be either a model, a model n ame, or the string 'self'

for my code.

It works totally well if I use 'self' as first parameter for foreign key. but thats not what I want. Also i am unable even to makemigrations after the following code.

models.py

from django.db import models
import datetime
from django.utils import timezone

class commentt(models.Manager):
    comment_id=models.IntegerField(primary_key=True)
    name=models.CharField(max_length=100, default="No Comment Added")
    comment_created=models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.name
# Create your models here.
class task_check_manager(models.Manager):
    def create_task(self, title,c1,c2,c3,list,score_occurence,score_occurence_csm,To):
        Task_check = self.create(title=title,c1=c1,c2=c2,c3=c3,list=list,score_occurence=score_occurence,score_occurence_csm=score_occurence_csm,To=To)
        # do something with the book
        return Task_check
class task_check(models.Model):
    LIST = (
           ('DAILY', 'DAILY'),
           ('WEEKLY','WEEKLY'),
           ('FORTNIGHT','FORTNIGHT'),
           ('MONTHLY','MONTHLY')
        )
    STATUS=(
        ('YES','YES'),
        ('NO','NO'),
        ('NEUTRAL','NEUTRAL')
    )
    title=models.CharField(max_length=50)
    c1=models.CharField(max_length=20,default='C1')
    c2=models.CharField(max_length=20,default='C2')
    c3=models.CharField(max_length=20,default='C3')
    From=models.DateTimeField(default=timezone.now())
    To=models.DateTimeField(default=timezone.now())
    #created_task=models.DateTimeField(auto_now_add=True)
    status=models.CharField(max_length=15,default="NEUTRAL",choices=STATUS)
    list=models.CharField(max_length=15, default='DAILY',choices=LIST )
    score_occurence_csm=models.IntegerField(default=0)
    score_occurence=models.IntegerField(default=0)
    comments=models.ForeignKey(commentt, on_delete=models.SET_NULL, null=True)
    vendor=models.TextField(max_length=200,default="NONE", editable=False)
    objects = task_check_manager()
    def __str__(self):
        return self.title

Upvotes: 2

Views: 6897

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477160

You Commentt model is indeed not a model, it is a manager. You should make it a subclass of Model:

class Commentt(models.Model):  # <- Model, not Manager
    comment_id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=100, default="No Comment Added")
    comment_created = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.name

Note: According to the PEP-8 Style Guide, the classes should be written in PascalCase, and the fields in snake_case.

Upvotes: 5

Related Questions