Opened 5 years ago
Closed 5 years ago
#30756 closed Bug (duplicate)
ModelForm does not work well with the override field on Inherited Model
Reported by: | Ramon Soares | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 2.2 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Following the samples:
class City(models.Model): name = models.CharField(max_length=100) class AddressBase(models.Model): city = models.ForeignKey(City, on_delete=models.PROTECT) ... country = models.ForeignKey(...) class Meta: abstract = True class Address(AddressBase): city = models.CharField(max_length=100) class AddessForm(forms.ModelForm): class Meta: model = Address fields = ("city", )
I expect a rendered form with the city field as a CharField, but I got the following error:
Cannot assign "''": "Address.city" must be a "City" instance.
The problem, I think, is with the code above, on models.Field.contribute_to_class
if self.column: # Don't override classmethods with the descriptor. This means that # if you have a classmethod and a field with the same name, then # such fields can't be deferred (we don't have a check for this). if not getattr(cls, self.attname, None): setattr(cls, self.attname, DeferredAttribute(self.attname)) }}
Note:
See TracTickets
for help on using tickets.
HI Ramon, this looks like a Duplicate of #30427. (There is a patch for that you could try. Feedback on the ticket or PR welcome.)