django-extra-views для отношений многих ко многим - PullRequest
0 голосов
/ 15 апреля 2019

Использование дополнительных представлений Django - Дополнительные представления Django

У меня есть форма, и у модели Навыков есть много-много связей с Профилем.

Я получаю ошибку

Unknown field(s) (title) specified for Skill_profile

Я заставил его работать так, как использовал exclude.

class ProfileSkillInline(InlineFormSetFactory):
        model = Skill.profile.through
        exclude = ['id']

И затем он начал работать - Как бы я правильно использовал наборы форм со многими ко многим без использования этого exclude = ['id'] - я знаю, что в Django 2.2 мне нужно использовать fields или exclude - но если я использую fields = ['title'] - это дает мне ошибку, поэтому я использовал exclude и выбрал случайное поле, которое мне не нужно - но это неправильный способ - вот почему я хотел бы знать.

Я использовал руководство Django, чтобы сделать правильные шаги - Django MTM Relationship

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    full_name = models.CharField(max_length=50, blank=True)
    description = models.TextField(blank=True)
    avatar = models.ImageField(blank=True)

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

    def get_absolute_url(self):
        return reverse('profile')


class Skill(models.Model):
    profile = models.ManyToManyField(Profile, related_name='skills', blank=True)
    title = models.CharField(max_length=100, blank=True)

    def __str__(self):
        return self.title

views.py

class ProfileSkillInline(InlineFormSetFactory):
    model = Skill.profile.through
    fields = ['title']


class SkillInline(InlineFormSetFactory):
    model = Skill
    inlines = [ProfileSkillInline]
    # fields = ['title']
    # initial = [{'title': 'Enter Skill'}]
    factory_kwargs = {'extra': 1, 'max_num': None,
                  'can_order': False, 'can_delete': True}
    prefix = 'skill_formset'


class ProfileUpdateView(UpdateWithInlinesView):
    model = Profile
    inlines = [ProfileSkillInline, ProjectInline]
    fields = ['full_name', 'description', 'avatar']
    template_name = 'profile_edit.html'

    def get_queryset(self):
        return Profile.objects.get(user=self.request.user)

    def get_object(self, queryset=None):
        return self.get_queryset()
...