调用Python对象时,超过了/form/movie/最大递归深度处的递归错误

调用Python对象时,超过了/form/movie/最大递归深度处的递归错误,python,django,orm,django-forms,manytomanyfield,Python,Django,Orm,Django Forms,Manytomanyfield,我不太清楚在django有多少油田在工作。因此,我这里有一个配置文件模型,在名称字段中,我想添加我将从登录凭据中获得的用户名,电影将从使用电影模型创建的表单中添加。我想了解这里的views.py文件有什么问题。谢谢 my models.py文件: from django.db import models from django.contrib.auth.models import User # Create your models here. class Article(models.Mod

我不太清楚在django有多少油田在工作。因此,我这里有一个配置文件模型,在名称字段中,我想添加我将从登录凭据中获得的用户名,电影将从使用电影模型创建的表单中添加。我想了解这里的views.py文件有什么问题。谢谢

my models.py文件:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length = 200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    likes = models.IntegerField(default = 0)

    def __str__(self):
        return self.title


class Comment(models.Model):
    name = models.CharField(max_length = 200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

class Language(models.Model):
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

class Framework(models.Model):
    name = models.CharField(max_length = 20)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Movie(models.Model):
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

class Character(models.Model):
    name = models.CharField(max_length = 20)
    movies = models.ManyToManyField(Movie)

    def __str__(self):
        return self.name

class profile(models.Model):
    name = models.ForeignKey(User,on_delete=models.CASCADE, related_name="name")
    # name = models.CharField(max_length = 20)
    movies = models.ManyToManyField(Movie)

    def __str__(self):
        return self.movies
from django import forms
from . models import Article, Comment, Movie, Character

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article
        fields = [
            'title',
            'body',
            'pub_date'
        ]

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = [
            'name',
            'body'
        ]
from django.shortcuts import render
from django.contrib.auth.models import User
from .models import Movie, Character, profile
from .forms import MovieForm, CharacterForm
# Create your views here.
def characterset(request):
    # form = CharacterForm(request.POST or None)
    # if form.is_valid():
    #     form.save()
    #     form = CharacterForm()

    form2 = MovieForm(request.POST or None)
    if form2.is_valid():
        form2.save()
        form2 = MovieForm()



    context = {
        'form2' : form2
    }

    return render(request, "manytomany/form2.html", context)

def movieset(request):
    current = request.user.username
    print(current)

    modelname = User.objects.get(username=current)
    print(modelname)

    a = profile(name=modelname)
    print(a)


    form = MovieForm(request.POST or None)
    if form.is_valid():
        f = form.save()
        a.movies.add(f)
        a.save()

    # form2 = MovieForm(request.POST or None)
    # if form2.is_valid():
    #     form2.save()
    #     form2 = MovieForm()



    context = {
        'form' : form
    }

    return render(request, "manytomany/form.html", context)

def show(request, id):
    a = Movie.objects.get(id = id)

    c = Character.objects.get(id = id)

    c.movies.add(a)

    return render(request, "manytomany/show.html")
my forms.py文件:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length = 200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    likes = models.IntegerField(default = 0)

    def __str__(self):
        return self.title


class Comment(models.Model):
    name = models.CharField(max_length = 200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

class Language(models.Model):
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

class Framework(models.Model):
    name = models.CharField(max_length = 20)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Movie(models.Model):
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

class Character(models.Model):
    name = models.CharField(max_length = 20)
    movies = models.ManyToManyField(Movie)

    def __str__(self):
        return self.name

class profile(models.Model):
    name = models.ForeignKey(User,on_delete=models.CASCADE, related_name="name")
    # name = models.CharField(max_length = 20)
    movies = models.ManyToManyField(Movie)

    def __str__(self):
        return self.movies
from django import forms
from . models import Article, Comment, Movie, Character

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article
        fields = [
            'title',
            'body',
            'pub_date'
        ]

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = [
            'name',
            'body'
        ]
from django.shortcuts import render
from django.contrib.auth.models import User
from .models import Movie, Character, profile
from .forms import MovieForm, CharacterForm
# Create your views here.
def characterset(request):
    # form = CharacterForm(request.POST or None)
    # if form.is_valid():
    #     form.save()
    #     form = CharacterForm()

    form2 = MovieForm(request.POST or None)
    if form2.is_valid():
        form2.save()
        form2 = MovieForm()



    context = {
        'form2' : form2
    }

    return render(request, "manytomany/form2.html", context)

def movieset(request):
    current = request.user.username
    print(current)

    modelname = User.objects.get(username=current)
    print(modelname)

    a = profile(name=modelname)
    print(a)


    form = MovieForm(request.POST or None)
    if form.is_valid():
        f = form.save()
        a.movies.add(f)
        a.save()

    # form2 = MovieForm(request.POST or None)
    # if form2.is_valid():
    #     form2.save()
    #     form2 = MovieForm()



    context = {
        'form' : form
    }

    return render(request, "manytomany/form.html", context)

def show(request, id):
    a = Movie.objects.get(id = id)

    c = Character.objects.get(id = id)

    c.movies.add(a)

    return render(request, "manytomany/show.html")
类电影格式(forms.ModelForm):

类CharacterForm(forms.ModelForm):

my views.py文件:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length = 200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    likes = models.IntegerField(default = 0)

    def __str__(self):
        return self.title


class Comment(models.Model):
    name = models.CharField(max_length = 200)
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

class Language(models.Model):
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

class Framework(models.Model):
    name = models.CharField(max_length = 20)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Movie(models.Model):
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

class Character(models.Model):
    name = models.CharField(max_length = 20)
    movies = models.ManyToManyField(Movie)

    def __str__(self):
        return self.name

class profile(models.Model):
    name = models.ForeignKey(User,on_delete=models.CASCADE, related_name="name")
    # name = models.CharField(max_length = 20)
    movies = models.ManyToManyField(Movie)

    def __str__(self):
        return self.movies
from django import forms
from . models import Article, Comment, Movie, Character

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article
        fields = [
            'title',
            'body',
            'pub_date'
        ]

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = [
            'name',
            'body'
        ]
from django.shortcuts import render
from django.contrib.auth.models import User
from .models import Movie, Character, profile
from .forms import MovieForm, CharacterForm
# Create your views here.
def characterset(request):
    # form = CharacterForm(request.POST or None)
    # if form.is_valid():
    #     form.save()
    #     form = CharacterForm()

    form2 = MovieForm(request.POST or None)
    if form2.is_valid():
        form2.save()
        form2 = MovieForm()



    context = {
        'form2' : form2
    }

    return render(request, "manytomany/form2.html", context)

def movieset(request):
    current = request.user.username
    print(current)

    modelname = User.objects.get(username=current)
    print(modelname)

    a = profile(name=modelname)
    print(a)


    form = MovieForm(request.POST or None)
    if form.is_valid():
        f = form.save()
        a.movies.add(f)
        a.save()

    # form2 = MovieForm(request.POST or None)
    # if form2.is_valid():
    #     form2.save()
    #     form2 = MovieForm()



    context = {
        'form' : form
    }

    return render(request, "manytomany/form.html", context)

def show(request, id):
    a = Movie.objects.get(id = id)

    c = Character.objects.get(id = id)

    c.movies.add(a)

    return render(request, "manytomany/show.html")

查看带有错误的Django页面。它引用了
return self.movies
这是由于您为该特定模型建立的关系

所以发生的是这样的:

个人资料->电影->多对多->个人资料

看到这里发生了什么吗?你在兜圈子,通过“循环引用”打破了Django。您可以做的是删除不符合要求的行:

class profile:
    ...
    __str__(self):
        return self.name # or something like it

欢迎来到stack overflow!请考虑阅读并考虑编辑你的问题。