1

I have following code

class Version(models.Model):
      version = CharFeild
      version_url = UrlField

class MyModel(models.Model):
       name = CharFeild
       default_version = OnetoOneField(Version)
       available_versions = ForeignKeyField(Version)

i am getting stuck at when selecting available version i am only able to pick one, where i want to select all available or all the ones i require.

dashkandhar
  • 83
  • 1
  • 7
  • Use a [ManyToManyField](https://docs.djangoproject.com/fr/4.0/topics/db/examples/many_to_many/) instead of a `ForeignKeyField`. – Raida Apr 13 '22 at 06:48

2 Answers2

2

You can use ForeignKey.related_name, as Django documentation says will help you

you can use it like this

class Version(models.Model):
    version = CharFeild
    version_url = UrlField

class MyModel(models.Model):
     name = CharFeild
     default_version = OnetoOneField(Version)
     available_versions = ForeignKeyField(Version, related_name='model')

And you can use it like that

version = Version.objects.get(version="1.1.0")
models = version.model.all()

Also check this question and this question

PleSo
  • 314
  • 1
  • 11
1

ForeignKeyField refers to one Version from MyModel

You are misunderstanding the purpose of foreign keys. Your MyModel needs to be parent to all Version, that are used as available_versions, so that means You have to have one parent from child model, so your parent will have multiple childs and children will have only one parent. That means you have to use ForeignKeyField inside Versions

class Version(models.Model):
      version = CharFeild
      version_url = UrlField
      model = ForeignKey('MyModel', on_delete=models.CASCADE, related_name='available_versions', null=True, blank=True)

class MyModel(models.Model):
       name = CharFeild
       default_version = OnetoOneField(Version, related_name='default_model')

I am not sure that there won't be any related_names collision (as it's a bit quirky), but I think you get the point

sudden_appearance
  • 1,968
  • 1
  • 4
  • 15