2015-10-30 4 views
1
class Professional(models.Model): 
    ... 
    favoriting_customers = models.ManyToManyField(
     'customers.Customer', blank=True, 
     through='favorites.FavoriteProfessional') 

    recommending_customers = models.ManyToManyField(
     'customers.Customer', blank=True, 
     through='recommendations.ProfessionalRecommendation') 

У меня нет ошибок при удалении из полей ManyToMany. Тем не менее, я получаю SystemCheckError, когда запускаю «python manage.py makemigrations».Django ManyToManyField SystemCheckError

ОШИБКИ: professional.Professional.favoriting_customers: (fields.E304) Обратный аксессуар для столкновений «Professional.favoriting_customers» с обратным доступом для «Professional.recommending_customers». СОВЕТ. Добавьте или измените аргумент related_name в определение для «Professional.favoriting_customers» или «Professional.recommending_customers». professional.Professional.recommending_customers: (fields.E304) Обратный аксессор для столкновений «Professional.recommending_customers» с обратным доступом для «Professional.favoriting_customers». СОВЕТ. Добавьте или измените аргумент related_name в определение для «Professional.recommending_customers» или «Professional.favoriting_customers».

ответ

1

Как предложено HINT, вам необходимо использовать related_name, чтобы избежать столкновений на backward relations. Вам понадобится это каждый раз, когда у вас есть два поля в одной модели с отношением к одному и тому же объекту (customers.Customer в вашем случае).

Вы можете попробовать что-то вроде этого:

class Professional(models.Model): 
    ... 
    favoriting_customers = models.ManyToManyField(
     'customers.Customer', blank=True, 
     through='favorites.FavoriteProfessional', 
     related_name='favorites' 
    ) 

    recommending_customers = models.ManyToManyField(
     'customers.Customer', blank=True, 
     through='recommendations.ProfessionalRecommendation', 
     related_name='recommendations' 
    ) 

Если вы не заинтересованы в обратной связи Professional таблицы, вы можете отключить его с помощью '+' как related_name:

class Professional(models.Model): 
    ... 
    favoriting_customers = models.ManyToManyField(
     'customers.Customer', blank=True, 
     through='favorites.FavoriteProfessional', 
     related_name='+' 
    ) 

    recommending_customers = models.ManyToManyField(
     'customers.Customer', blank=True, 
     through='recommendations.ProfessionalRecommendation', 
     related_name='+' 
    ) 

Кроме того, вы должны be careful with related_name

+1

Я использовал related_name = '+', и все хорошо. Большое спасибо! –

Смежные вопросы