Hi Simon,

thanks for your reply, I suspected exactly what you said.
I am not sure, this is not my code so I am not aware of the reason for this 
but I will try to refactor it the way you suggest.

Cheers,
filipa

On Friday, December 4, 2015 at 4:38:41 PM UTC+1, Simon Charette wrote:
>
> Hi filias,
>
> I personally didn't know one could define a reverse foreign key this way 
> and
> I doubt this use case is covered by the test suite. I'm afraid it worked 
> for
> Django < 1.8 by chance since it's not documented you can re-use the
> implicitly created intermediary model as a `through` argument. I suspect 
> this
> might be due to the `_meta`[1] refactoring that happened in 1.8.
>
> May I ask you why you don't simply define a `related_name`[2] if you simply
> want to have a different reverse relationship name?
>
> class Pizza(models.Model):
>     pass
>
> class Topping(models.Model):
>     all_pizzas = models.ManyToManyField(
>         Pizza, related_name='available_toppings',
>         verbose_name='available pizzas'
>     )
>
> Cheers,
> Simon
>
> [1] https://docs.djangoproject.com/en/1.8/releases/1.8/#model-meta-api
> [2] 
> https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.ManyToManyField.related_name
>
> Le vendredi 4 décembre 2015 07:08:51 UTC-5, filias a écrit :
>>
>> Indeed something in the project's code must be wrong but it is not the 
>> bi-directional ManyToMany as this has been working in django 1.4, 1.5, 1.6 
>> and 1.7. One might want to had the ManyToMany in both models so to be able 
>> to add more information, as it is stated in the django docs 
>> https://docs.djangoproject.com/en/1.9/topics/db/models/#extra-fields-on-many-to-many-relationships
>>  
>> in my case I just want the field to have a different name. I am thinking of 
>> using a property but I got into some troubles with my code when I did that, 
>> specifically the migration to remove the all_pizzas field crashes.
>>
>> I have created a new project with only those 2 models and it seems to 
>> work correctly, so the problem is somehow related to our test runner 
>> (py.test) and something else which I still don't know.
>>
>> My models.py file looks like this:
>> from django.db import models
>>
>>
>> class Pizza(models.Model):
>>     available_toppings = models.ManyToManyField('Topping')
>>
>>
>> class Topping(models.Model):
>>    all_pizzas = models.ManyToManyField(Pizza, 
>> through=Pizza.available_toppings.through, verbose_name='available pizzas')
>>
>> I will continue investigating.
>>
>> On Friday, December 4, 2015 at 11:31:19 AM UTC+1, Remco Gerlich wrote:
>>>
>>> One, from that error message alone I can't figure out what is happening 
>>> and why when you run tests, so I can't help there.
>>>
>>> But two: you don't have a ManyToManyField, you have TWO 
>>> ManyToManyFields. If you define a many to many field on one model, than 
>>> it's automatically also defined on the other (if you only have the one on 
>>> Pizza, then you can do topping.pizza_set.all() from the other side.
>>>
>>> So your current code is almost certainly wrong, but if these are your 
>>> exact models than I don't think they are related to your error.
>>>
>>> Remco
>>>
>>> On Fri, Dec 4, 2015 at 9:54 AM, filias <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have recently upgraded to sjango 1.8 and I have 2 models with a 
>>>> bi-directional ManyToMany field. It looks like this
>>>>
>>>> class Pizza(Model):
>>>>     available_toppings = ManyToManyField('Topping')
>>>>
>>>> class Topping(Model):
>>>>    all_pizzas = ManyToManyField(Pizza, 
>>>> through=Pizza.available_stoppings.through, verbose_name='available pizzas')
>>>>
>>>> Everything was fine in django 1.7 but right now when running tests, 
>>>> specifically when creating the test database, I get this exception:
>>>>
>>>> self = <django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 
>>>> 0x7fd24fca4b00>
>>>>
>>>>     def execute(self, query, params=None):
>>>>         if params is None:
>>>>
>>>> >           return Database.Cursor.execute(self, query)
>>>> E           OperationalError: table "products_pizza_available_toppings" 
>>>> already exists
>>>>
>>>> So it looks like the creation of the test database is trying to 
>>>> re-create the intermediate table for the ManyToMany.
>>>>
>>>> I do not get any exception when running my site.
>>>>
>>>> Does anyone know how can I fix this?
>>>>
>>>> Thank you in advance
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/django-users.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/django-users/4b8bb3c4-c0bd-4315-9cb6-004db2fa2355%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/django-users/4b8bb3c4-c0bd-4315-9cb6-004db2fa2355%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/36285042-7d67-4b88-a78f-b35d8c2afaaa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to