У меня проблема с доступом к моделям разных классов через related_name, и мне нужна ваша помощь, чтобы найти чистое решение, использующее несколько SQL запросов и легко расширяемое:
class RoundTripToDifferentPlaces(models.Model):
price = models.FloatField(default=0)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
...
class PlaceVisit(models.Model):
roundtrip = models.ForeignKey(RoundTripToDifferentPlaces, related_name="place_visit")
individual_price = models.FloatField(default=0)
name = models.CharField(max_length=31, null=True)
street = models.CharField(max_length=31, null=True)
creation_date = models.DateTimeField(auto_now_add=True)
...
class RestaurantVisit(models.Model):
place = models.OneToOneField(Job, on_delete=models.CASCADE, primary_key=True)
Some more fields...about pricedetails
class LibraryVisit(models.Model):
place = models.OneToOneField(Job, on_delete=models.CASCADE, primary_key=True)
Some more fields...about pricedetails
...many more subcategories of places and i will add more in the future
На мой взгляд Я l oop через RoundTripToDifferentPlaces
, и мне нужно получить всю информацию о связанных моделях. Я мог бы sh в своих моделях:
class RestaurantVisit(models.Model):
placevisit = models.OneToOneField(Placevisit, related_name="specific_visit")
roundtrip = models.OneToOneField(RoundTripToDifferentPlaces, related_name="restaurant_visit")
Some more fields...
class LibraryVisit(models.Model):
placevisit = models.OneToOneField(Placevisit, related_name="specific_visit")
roundtrip = models.OneToOneField(RoundTripToDifferentPlaces, related_name="library_visit")
Some more fields...
и в моих представлениях / шаблонах:
...
roundtrip = RoundTripToDifferentPlaces().objects.filter(user = request.user )
for visit in roundtrip.place_visit.all():
print(visit)
print(visit.spefic_visit) #does not work
#and e.g.:
print(roundtrip.restaurant_visit) #works perfectly
(RoundTrip может иметь только одно посещение или столько, сколько есть разные модели)
Кажется, мне не разрешено давать одни и те же related_name
разным классам.
Есть ли обходной путь или это возможно с помощью общих c ключей?