Отказ от ответственности: Я саркастичен, когда говорю, что это "решение".Это ужасная идея и, на мой взгляд, никогда не должна быть реализована.Я только показываю это, чтобы добавить ясности к , почему вы не можете добавить __
к столбцам модели, в надежде, что вы пересмотрите проблему под рукой.
Какответ на ответы о том, что вы не можете иметь двойные имена полей подчеркивания:
да, вы можете !
Это просто, просто перейдите кdjango/db/models/constants.py
и измените LOOKUP_SEP
на все, что вы хотите (для этого примера я буду использовать _some_new_sep_
)
Вот несколько примеров:
myapp / models:
from django.db import models
class Foo(models.Model):
test__col = models.IntegerField()
class Bar(models.Model):
foo = models.ForeignKey(Foo, related_name='bar', on_delete=models.CASCADE)
title = models.CharField(max_length=45)
использование:
>>> from myapp.models import Foo, Bar
>>> Foo.objects.create(test__col=1)
<Foo: Foo object (1)>
>>> Bar.objects.create(foo_id=1, title='test')
<Bar: Bar object (1)>
>>>
>>> Foo.objects.filter(bar_some_new_sep_title='test')
<QuerySet [<Foo: Foo object (1)>]>
Существует только один небольшой недостаток , это приведет к тому, что любые сторонние приложения, которые жестко закодируют значение по умолчанию от LOOKUP_SEP
до , прервутся .Оказывается, это в значительной степени каждое приложение, которое его использует (включая приложения по умолчанию для django).
Как указано в комментариях WilliamVanOsem:
На самом деле, это очень распространенный феномен: если человек спрашивает «Как сделать Y», то ответ таков: «Во-первых, вы не должны делать Y, вы можете исправить исходную проблему лучше».