'Import ManyToMany field
I have a ManyToMany field in my models.
I want to import data and enter into that field.
My Resources.py:-
class ClinicResource(resources.ModelResource):
language = fields.Field(column_name='language',attribute='language', widget=ForeignKeyWidget(Language, 'code'))
country = fields.Field(column_name='country',attribute='country', widget=ClinicCountryForeignKeyWidget(model = Country, field ='name'))
clinic_languages = fields.Field(widget=ManyToManyWidget(ClinicLanguages, field='name'))
class Meta:
model = Clinic
fields = ('code', 'name', 'city', 'score')
exclude = ('id',)
import_id_fields = ('code', 'name', 'city', 'score', 'language', 'country')
my Models.py:-
class Clinic(models.Model):
code = models.CharField(max_length= 10, blank= False, null= False)
name = models.CharField(max_length= 256, blank= False, null= False)
slug = models.SlugField(null= True, blank= True)
# country = models.CharField(max_length= 256, blank= False, null= False)
city = models.CharField(max_length= 256, blank= False, null= False)
country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name='allcliniccountry', blank= True, null=True)
score = models.FloatField(blank= False, null= False, default= 2, validators=[MinValueValidator(min), MaxValueValidator(max)])
language = models.ForeignKey(Language, on_delete=models.CASCADE, related_name='allclinicslanguage', blank= True)
# about = models.TextField(blank= True, null= True)
clinic_languages = models.ManyToManyField(ClinicLanguages, related_name='clinic_language', blank= True)
about = tinymce_models.HTMLField(blank= True, null= True)
created= models.DateTimeField(auto_now=True)
status = models.CharField(max_length= 30, choices= SIZE_CHOICES, default= 'pending', blank= False, null= False)
NOTE THE clinic_languages field, this is what I want to import
Solution 1:[1]
You can see how the ManyToManyWidget works in the django-import-export source.
You have defined your field correctly:
clinic_languages = fields.Field(widget=ManyToManyWidget(ClinicLanguages, field='name'))
This means the lookup code is going to attempt to load related instances using the 'name' field. By default, they have to be separated by ',' in your import file, e.g:
clinic_languages
name1,name2,name3
You can override the separator if necessary.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Matthew Hegarty |
