DJANGO - обратный аксессор для профиля. Пользователь конфликтует с обратным аксессором для того же поля? - PullRequest
0 голосов
/ 11 июля 2020

Я получаю следующую ошибку:

    dsapi.Profile.user: (fields.E304) Reverse accessor for 'Profile.user' clashes with reverse accessor for 'Profile.user'.
        HINT: Add or change a related_name argument to the definition for 'Profile.user' or 'Profile.user'.
dsapi.Profile.user: (fields.E305) Reverse query name for 'Profile.user' clashes with reverse query name for 'Profile.user'.

Все мои исследования показали, что для каждой проблемы создается related_name. Но в моем случае это говорит мне, что у обратного аксессора проблема сама с собой. Есть здесь какие-нибудь мысли? Ниже приведен код проблемы c в моем файле models.py.

import uuid
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver


class DsapiModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True, editable=False)

    class Meta:
        abstract = True

class Profile(DsapiModel):
    """
    Extend User model using one-to-one link
    Save a query using users = User.objects.all().select_related('profile')
    """
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    favorite_sites = models.ManyToManyField(Site)

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


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

1 Ответ

1 голос
/ 11 июля 2020

Ошибка указывает на то, что в вашем проекте существует несколько отношений Profile <-> User.

Произвольно, между ними может быть столько же отношений, но их related_name должно быть другим.

Вот один пост SO, который может помочь вам понять related_name

  1. Для чего related_name используется в Django?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...