【问题标题】:Django Many to Many Field add() got an unexpected keyword argument 'id'Django 多对多字段 add() 得到了一个意外的关键字参数 'id'
【发布时间】:2020-07-16 23:58:02
【问题描述】:

我想将 Available classic 中的项目添加到 Chosen classic

我该怎么做,如下图所示

我可以通过

获得Chosen classic

Profile.objects.get(user=request.user).classic.add(id=2)

但我无法将 Available classic 中的 iem 添加到 Chosen classic

请任何人都可以快速解决这个问题 谢谢大家

Models.py

from django.db import models

# Create your models here.
from django.utils import timezone
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver


class Language(models.Model):
    language = models.CharField(
        max_length=2, 
        choices=[
            ('AR', 'Arabic'),
            ('EN', 'English'),
        ],
        default='AR'
    )

    def __str__(self):
        return self.language


class Classic(models.Model):
    name = models.CharField(max_length=50, blank=False, null=False)
    music = models.FileField(upload_to='', max_length=100, blank=True, null=True)
    lang = models.ForeignKey(Language, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    classic = models.ManyToManyField(Classic, blank=True, null=True)
    workOut = models.ManyToManyField(WorkOut, blank=True, null=True)
    chillOut = models.ManyToManyField(ChillOut, blank=True, null=True)
    romantic = models.ManyToManyField(Romantic, blank=True, null=True)
    happy = models.ManyToManyField(Happy, blank=True, null=True)
    sad = models.ManyToManyField(Sad, blank=True, null=True)
    lang = models.ManyToManyField(Language, blank=True, null=True)

    def __str__(self):
        return str(self.user)


def update_user_profile(sender, **kwargs):
    if kwargs['created']:
        user = Profile.objects.create(user=kwargs['instance'])

post_save.connect(update_user_profile,sender=User)

Admin.py

from django.contrib import admin

# Register your models here.
from . import models


class ClassicAdmin(admin.TabularInline):
    model = models.Classic

class PlayLists(admin.ModelAdmin):
    inlines = [ClassicAdmin]

class Favo(admin.ModelAdmin):
    filter_horizontal = ['classic']


admin.site.register(models.Language, PlayLists)
admin.site.register(models.Profile, Favo)

我的代码有什么问题 谢谢大家

【问题讨论】:

  • 我无法从可用经典中添加是什么意思?你有什么错误吗?
  • 是的,从视图而不是管理面板添加时会出错
  • 尝试将实例传递给.add(),而不是id。喜欢user.groups.add(group_instance)。它应该可以工作。
  • user.groups.add(group_instance)请插入代码中的示例

标签: python django django-models django-views many-to-many


【解决方案1】:

Thant 和我一起工作

Profile.objects.get(user=request.user).classic.add(Classic.objects.get(id=1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 2018-05-02
    • 2020-08-18
    • 2019-02-03
    • 2021-12-07
    相关资源
    最近更新 更多